1차 개선 사항 (Naming 개선, Enum 개선) - leegwichan/java-baseball-playground GitHub Wiki
-
기능 요구 사항 수정
- 입력 받은 값에 중복된 숫자가 있으면 중복되면 에러를 발생하도록 함
- 기능 요구 사항에 따로 명시되어 있지 않았으나 프로그램 도메인 이해를 통해 추가 해야겠다고 느낌
- 입력 받은 값에 중복된 숫자가 있으면 중복되면 에러를 발생하도록 함
-
코드 개선 사항
- class Naming을 실제 제품에서 사용하는 용어로 바꾸기
- ex) RandomNotOverlappedNumberGenerator -> BaseballNumberGenerator
- Enum == 기호 개선
- enum에 method를 구현하여 호출을 통해 판단할 것
- class Naming을 실제 제품에서 사용하는 용어로 바꾸기
-
깨달은 점
- Test의 DisplayName에 자세한 내부 구현 사항을 적으면 안된다.
- 내부 구현 사항이 바뀌면 DisplayName도 전부 바뀌어야 한다.
- Digit의 class 이름이 NumberDigit으로 바뀌니까 DisplatName도 바뀌어야 한다.
@DisplayName("List<Digit> 자리에 null이 들어가서는 안된다") @Test void creationTest_whenWithNullDigitList() { assertThatThrownBy(() -> BaseballNumber.from((List<BaseballDigit>) null)) .isInstanceOf(NullPointerException.class) .hasMessageContaining("Number 생성할 때 입력 값은 null이 아니어야 합니다"); }
- Test의 DisplayName에 자세한 내부 구현 사항을 적으면 안된다.
-
성능 개선 문제
// 대안 1 @Override public List<BaseballDigit> generate(int size) { validateSize(size); List<BaseballDigit> digits = new ArrayList<>(); while (digits.size() < size) { BaseballDigit randomDigit = BaseballDigit.of(randomFrom1To9()); addDigitIfNotOverlapped(digits, randomDigit); } return digits; } private void addDigitIfNotOverlapped(List<BaseballDigit> digits, BaseballDigit digit){ if (!digits.contains(digit)) { digits.add(digit); } } // 대안 2 @Override public List<BaseballDigit> generate(int size) { validateSize(size); return IntStream.iterate(randomFrom1To9(), num -> randomFrom1To9()) .distinct().limit(size) .mapToObj(BaseballDigit::of) .collect(Collectors.toList()); }
- 1_000_000 회 반복 테스트 결과, 대안 1이 대안 2보다 약 30% 정도 시간 감소를 보임
- 가독성을 중요시 생각한다면 대안 2, 조금이라도 빠른 것을 선호한다면 대안 1을 선택할 것 같다.