[1단계 - 로또(자동)] 유콩(김유빈) 미션 제출합니다. by kyukong · Pull Request #397 · woowacourse/java-lotto
[2단계 - 로또(수동)] 유콩(김유빈) 미션 제출합니다. by kyukong · Pull Request #486 · woowacourse/java-lotto
public Payment(final String payment) {
validatePayment(payment);
this.payment = Integer.parseInt(payment);
}
특별한 경우가 아니라면 주 생성자의 파라미터는 객체가 보유하는 상태값의 타입과 일치시킨다. 타입을 일치시킴으로써 다른 사용자가 가질 수 있는 혼동을 줄일 수 있고 부 생성자를 추가하여 확장할 경우 로직이 복잡해지지 않을 수 있다.
생성자의 파라미터 타입과 객체가 가지는 변수의 타입이 달라야 한다면 정적 팩토리 메소드를 사용해 달라질 수 있음을 나타낸다.
예) 로또 티켓 생성 시 중복값이 없으며 특정한 기준으로 정렬되어 있음을 알리기 위해 TreeSet 타입으로 값을 관리하였다. 하지만 사용자가 입력한 값에 중복값이 있을 경우 에러 메시지로 띄우기 위해 ArrayList 로 입력받아 검증하였다. 생성자의 파라미터 타입과 객체의 변수 타입이 다르기 때문에 정적 팩토리 메소드를 사용하였다.
static {
lottoTotalNumbers.addAll(IntStream.range(Ball.MINIMUM_NUMBER, Ball.MAXIMUM_NUMBER + 1)
.boxed()
.collect(Collectors.toList()));
}
45개의 로또 번호(Ball)가 프로그램 내에서 중복적으로 사용되므로 객체를 캐싱하였다. 로또 번호를 사용하는 주체인 로또 티켓(Lotto) 에서 캐싱하였는데 다음과 같은 피드백을 받았다. Lotto 는 검증된 Ball 객체 6개를 중복없이 가지는 객체일 뿐 모든 Ball 정보를 관리하지는 않는다. Ball 객체의 생성자를 호출할 때 내부적으로 캐싱된 객체를 반환하기 위해 캐싱하는 위치를 Ball 로 이동하였다.
특정한 값에 대한 로직이 존재한다고 무조건 객체로 생성하는 것은 옳지 않다. 사용하는 범위, 필요한 로직 등에 따라 값의 형식이 다를 수 있다. 어떤 상황에서 어떤 형식을 사용해야 하는지 정리해보았다.