Skip to main content
김주엽
1. 📌 핵심 개념 정리
✅ 요약하기
- 첫째 돌려보자
SerialDateTests
클래스는 모든 경우를 점검하지 않는다는 사실이 드러난다.
MonthCodeToQuarter
메서드를 전혀 호출하지 않는다.
- 코드 커버리지 분석 도구인 클로버를 이용해 단위 테스트가 실행하는 코드, 그렇지 않은 코드를 조사한 결과 185개 중 50% 만 실행하고 있었다.
- 클래스를 절저히 이해하고 리팩터링하려면 높은 테스트 커버리지가 필요하다.
- 둘째, 고쳐보자
- 코드의 주석에는 라이선스 정보, 저작권, 작성자, 변경 이력이 존재한다.
- 변경 이력의 경우 1960년대에 나온 구시대 방식으로 이제는 소스 코드 제어 도구가 관리하기에 제거한다.
import
문을 줄인다.
java.text.*
와 java.util.*
로 줄여도 된다.
- Javadoc 주석에는 자바, 영어, Javadoc, HTML 등 여러 언어를 사용하고 있다.
- 차라리 주석 전부를 <pre>로 감싸는 편이 좋다.
- 클래스 이름이
SerialDate
인 이유가 무엇일까?
- 일련번호라는 단어는 날짜보다 제품, 식별 번호로 사용하는 것이 더 적합하다.
SerialDate
라는 이름은 구현을 암시하는데 실제로는 추상 클래스다.
SerialDate
라는 이름 대신에 DayDate
로 변경했다.
MonthConstants
를 상속받고 있는데 이 클래스는 달을 정의하는 상수 모음에 불과하다.
DayDate
자체를 훼손하지 않으면서 구현 정보를 전달할 방법이 필요했다.
- 부모 클래스는 자식 클래스를 몰라야 바람직하다.
- 추상 클래스는 구체적인 구현 정보를 포함하지 않아도 된다.
Abstract Factory
패턴을 사용해 DayDateFactory
를 만들었다.
- 인수와 변수 선언에서
final
키워드를 모두 없앴다.
- 실질적인 가치는 없으면서 코드만 복잡하게 만든다고 판단했기 때문이다.
- 로버트 시몬스는 코드 전체에
final
을 사용하라고 강력히 권장한다.
for
문 안에 if
문이 두 번 나오는데 이를 ||
연산자를 사용해 하나로 줄인다.
getMonths
라는 메서드가 두 개가 존재한다.
- 메서드를 하나로 합쳐 구조를 단순화하고 이름을 좀 더 서술적으로 변경한다.
- 결론
- 보이스카우트 규칙을 지키며 좀 더 깨끗한 코드로 개선시킬 수 있었다.
- 테스트 커버리지가 증가하고 버그를 수정하고 코드 크기가 감소했다.
- 다음 사람은 좀 더 코드를 쉽게 이해할 수 있게 됐다.
2. 🤔 이해가 어려운 부분
🔍 질문하기
- 둘째, 고쳐보자
- 어려웠던 부분
저자는 테스트 커버리지를 높이기 위해서 주석 처리된 테스트 코드까지 모두 통과하도록 코드를 변경했는데
이를 이해하기가 어려웠다.
- 궁금한 점
주석처리된 테스트 코드 중에는 좋지 않은 예시도 포함되어 있는데 그렇다면 왜 그런 테스트 코드를 수정하지 않고 그대로 뒀을까?
3. 📚 참고 사항
📢 논의하기
- 관련 자료 공유