[우테코] 3주차 회고록 + 코드 리뷰 스터디 피드백 정리
스터디원 코드에서 배울 점
1. 반복되는 상수들을 별도 클래스 관리 고려해보기
package lotto.setting;
public class Setting {
public static int LOTTO_MIN_NUMBER = 1;
public static int LOTTO_MAX_NUMBER = 45;
public static int LOTTO_PICK_NUMBER = 6;
public static int LOTTO_PRICE_PER_ONE = 1_000;
}
// 활용 모습
private void validateInputNumberIsBetween(int number){
if(number < Setting.LOTTO_MIN_NUMBER || number > Setting.LOTTO_MAX_NUMBER){
throw new LottoException("번호는 "+Setting.LOTTO_MIN_NUMBER+"부터 "+ Setting.LOTTO_MAX_NUMBER +" 사이의 숫자여야 합니다.");
}
}
2. Error 접두사 처리
2-1. IllegalArgumentException 상속
package lotto.exception;
public class LottoException extends IllegalArgumentException{
private static final String ERROR_PREFIX = "[ERROR] ";
public LottoException(String message){
super(ERROR_PREFIX + message);
}
}
// 활용 예시
private void validateInputMoneyIsRightUnit(String money){
if(Math.toIntExact(Long.parseLong(money) % Setting.LOTTO_PRICE_PER_ONE) != 0){
throw new LottoException("구입 금액은 "+ Setting.LOTTO_PRICE_PER_ONE +"원 단위입니다.");
}
}
2-2. ErrorUI 클래스 정의
package lotto.ui;
public class ErrorUI {
private static final String ERROR_HEADER = "[ERROR]";
public void printError(String errorMessage) {
System.out.println(String.format("%s %s", ERROR_HEADER, errorMessage));
}
}
// 활용 예시
public class LottoController {
public void run() {
try {
Ticket ticket = purchase();
List<Lotto> lottos = exchange(ticket);
printPurchaseLotto(lottos);
Ranker ranker = inputNumber();
Map<WinningResult, Integer> result = ranker.rankTotal(lottos);
printResult(result);
printRateOfReturn(result, ticket);
} catch (IllegalArgumentException e) {
ErrorUI ui = new ErrorUI();
ui.printError(e.getMessage());
}
}