Skip to main content

김주엽

1. 📌 핵심 개념 정리

✅ 요약하기

  1. 첫째 돌려보자
    • SerialDateTests 클래스는 모든 경우를 점검하지 않는다는 사실이 드러난다.
      • MonthCodeToQuarter 메서드를 전혀 호출하지 않는다.
    • 코드 커버리지 분석 도구인 클로버를 이용해 단위 테스트가 실행하는 코드, 그렇지 않은 코드를 조사한 결과 185개 중 50% 만 실행하고 있었다.
    • 클래스를 절저히 이해하고 리팩터링하려면 높은 테스트 커버리지가 필요하다.

  1. 둘째, 고쳐보자
    • 코드의 주석에는 라이선스 정보, 저작권, 작성자, 변경 이력이 존재한다.
      • 변경 이력의 경우 1960년대에 나온 구시대 방식으로 이제는 소스 코드 제어 도구가 관리하기에 제거한다.
    • import문을 줄인다.
      • java.text.*java.util.*로 줄여도 된다.
    • Javadoc 주석에는 자바, 영어, Javadoc, HTML 등 여러 언어를 사용하고 있다.
      • 차라리 주석 전부를 <pre>로 감싸는 편이 좋다.
    • 클래스 이름이 SerialDate인 이유가 무엇일까?
      • 일련번호라는 단어는 날짜보다 제품, 식별 번호로 사용하는 것이 더 적합하다.
      • SerialDate라는 이름은 구현을 암시하는데 실제로는 추상 클래스다.
        • SerialDate라는 이름 대신에 DayDate로 변경했다.
    • MonthConstants를 상속받고 있는데 이 클래스는 달을 정의하는 상수 모음에 불과하다.
      • Enum으로 변경해서 사용하는 것이 좋다.
    • DayDate 자체를 훼손하지 않으면서 구현 정보를 전달할 방법이 필요했다.
      • 부모 클래스는 자식 클래스를 몰라야 바람직하다.
      • 추상 클래스는 구체적인 구현 정보를 포함하지 않아도 된다.
      • Abstract Factory 패턴을 사용해 DayDateFactory를 만들었다.
      • 인수와 변수 선언에서 final 키워드를 모두 없앴다.
        • 실질적인 가치는 없으면서 코드만 복잡하게 만든다고 판단했기 때문이다.
        • 로버트 시몬스는 코드 전체에 final을 사용하라고 강력히 권장한다.
      • for문 안에 if문이 두 번 나오는데 이를 ||연산자를 사용해 하나로 줄인다.
      • getMonths라는 메서드가 두 개가 존재한다.
        • 메서드를 하나로 합쳐 구조를 단순화하고 이름을 좀 더 서술적으로 변경한다.

  1. 결론
    • 보이스카우트 규칙을 지키며 좀 더 깨끗한 코드로 개선시킬 수 있었다.
    • 테스트 커버리지가 증가하고 버그를 수정하고 코드 크기가 감소했다.
    • 다음 사람은 좀 더 코드를 쉽게 이해할 수 있게 됐다.

2. 🤔 이해가 어려운 부분

🔍 질문하기

  1. 둘째, 고쳐보자
    • 어려웠던 부분
      저자는 테스트 커버리지를 높이기 위해서 주석 처리된 테스트 코드까지 모두 통과하도록 코드를 변경했는데
      이를 이해하기가 어려웠다.
    • 궁금한 점
      주석처리된 테스트 코드 중에는 좋지 않은 예시도 포함되어 있는데 그렇다면 왜 그런 테스트 코드를 수정하지 않고 그대로 뒀을까?

3. 📚 참고 사항

📢 논의하기

  1. 관련 자료 공유