클린코드 - 16.SerialDate 리팩터링

2022-02-27

SerialDate 리팩터링

http://www.jfree.org/jcommon/index.php에서 JCommon 라이브러리를 제공한다. JCommon 라이브러리를 뒤져보면 org.jfree.date라는 패키지가 있으며, 여기에 SerialDate라는 클래스가 있다.

SerialDate를 구현한 사람은 데이비드 길버트(David Gilbert)다. 데이비드는 확실히 숙련된 우수한 프로그래머다. SerialDate 코드에서 데이비드는 엄청난 절제력과 전문가 정신을 보여준다.

SerialDate는 날짜를 표현하는 자바 클래스다. 하지만 자바는 이미 java.util.Date, java.util.Calendar 등과 같은 클래스를 제공한다. 데이비드는 자주 느꼈던 불편함을 없애고자 SerialDate 클래스를 구현했다.


  • 모든 경우를 점검하는 단위 테스트 케이스가 필요하다. 버그는 없어야 한다. 이후 모든 테스트 케이스를 통과해야 한다.
  • 주석에 변경 이력은 필요 없다.
  • 클래스 이름을 적절하게 짓는다.
  • static final 상수 모음보다 enum을 사용한다.
  • 불필요한 주석은 거짓말과 잘못된 정보가 쌓이기 좋은 곳이다.
  • 일반적으로 기반 클래스(base class, 부모 클래스)는 파생 클래스(derivative, 자식 클래스)를 몰라야 바람직하다.
  • 메서드 이름 또한 적절하게 지어야 한다.
  • 필드 이름 또한 적절하게 지어야 한다.
  • 일반적으로 메서드 인수로 플래그(특정 동작을 수행할지 말지 결정하는 (보통 1비트인) 변수)는 바람직하지 못하다.
  • static인지 인스턴스인지 잘 생각해야 한다.
  • if 문 연쇄도 enum으로 옮길 수 있다.

결론

보이스카우트 규칙을 따라야 한다. 체크아웃한 코드보다 좀 더 깨끗한 코드를 체크인한다. 리팩터링은 시간은 걸리지만 가치 있는 작업이다. 버그를 고치며, 코드 크기가 줄고, 코드가 명확해진다.

다음 사람은 코드를 좀 더 쉽게 이해할 수 있다. 그래서 지금보다 코드를 좀 더 쉽게 개선할 수 있을 것이다.