Post

[Book - Clean Code] 16. SerialDate 리팩터링

일반적으로 기반(base, 부모) 클래스는 파생(derivative, 자식) 클래스를 몰라야 바람직하다.
그래서 Abstract Factory Pattern을 적용한다.

추상 메서드로 위임하는 정적 메서드는 Singleton, Decorator, Abstract Factory 패턴 조합을 사용한다.

설명이 부실한 주석은 코드만 복잡하게 만든다.

[DayDate 작업 내용]

  1. 처음에 나오는 주석은 너무 오래되어서 간단하게 고치고 개선
  2. enum을 모두 독자적인 소스 파일로 이동
  3. 정적 변수(dateFormatSymbols)와 정적 메서드(getMonthNames, isLeapYear, lastDayOfMonth)를 DateUtil이라는 새 클래스로 이동
  4. 일부 추상 메서드를 DayDate 클래스로 끌어올림
  5. Month.make를 Month.fromInt로 변경하듯 다른 enum도 똑같이 변경했으며, 모든 enum에 toInt() 접근자를 생성하고 index 필드를 private으로 정의
  6. plusYears와 plusMonths에 흥미로운 중복이 있어서 correctLastDayOfMonth라는 새 메서드를 생성해 중복을 제거하여, 세 메서드가 더 명확
  7. 팔방미인으로 사용하던 숫자 1을 제거하여, 모두 Month.JANUARY.toInt() 혹은 Day.SUNDAY.toInt()로 적절히 변경

테스트하는 코드가 줄어서가 아니라 클래스 크기가 작아지는 바람에 테스트하지 않은 코드의 비중이 커져,
코드 커버리지가 감소했다!

This post is licensed under CC BY 4.0 by the author.

© Yn3. Some rights reserved.