1차 개선 사항 (Naming 개선, Enum 개선) - leegwichan/java-baseball-playground GitHub Wiki

  • 기능 요구 사항 수정

    • 입력 받은 값에 중복된 숫자가 있으면 중복되면 에러를 발생하도록 함
      • 기능 요구 사항에 따로 명시되어 있지 않았으나 프로그램 도메인 이해를 통해 추가 해야겠다고 느낌
  • 코드 개선 사항

    • class Naming을 실제 제품에서 사용하는 용어로 바꾸기
      • ex) RandomNotOverlappedNumberGenerator -> BaseballNumberGenerator
    • Enum == 기호 개선
      • enum에 method를 구현하여 호출을 통해 판단할 것
  • 깨달은 점

    • 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이 아니어야 합니다");
          }
  • 성능 개선 문제

      // 대안 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을 선택할 것 같다.
⚠️ **GitHub.com Fallback** ⚠️