김동형수 개발기

테스트 주도 개발 - 1부 8장 본문

책 스터디/[완료] 테스트 주도 개발

테스트 주도 개발 - 1부 8장

김동형수 2022. 9. 7. 02:56

8장 객체만들기

할일목록

  • $5 + 10CHF = $10(환율이 2:1일 경우)
  • $5 X 2 = $10
  • amount를 private로 만들기
  • Dollar 부작용?
  • Money 반올림?
  • equals()
  • hashCode()
  • Equal null
  • Equal object
  • 5CHF X 2 = 10CHF
  • Dollar / Franc 중복
  • 공용 equals
  • 공용 times
  • Franc와 Dollar 비교하기
  • 통화?

Franc, Dollar times() 코드가 거의 똑같다.

타입을 Money로 반환하면 더 비슷하게 만들 수 있다.

 

다음 단계로 뭘 해야 할지 명확하지 않다.

Money의 하위 클래스는 많은 일을 하는 것 같지 않으므로 아예 제거해버리고 싶다.

한번에 큰 단계를 밟는 것은 TDD를 효과적으로 보여주기에 적절하지 않을 것 같다.

 

Money에 Dollar를 반환하는 팩토리 메서드를 도입할 수 있다.

 

테스트 코드에서 인스턴스 생성하던 부분은 Money의 static 메소드를 활용해서 생성 후 반환한다.

Dollar, Franc에 대한 참조가 사라진다.

Money 클래스의 하위 클래스를 제거하고 팩토리 메서드를 도입하기 위해서 Money의 times()는 추상메소드로 지정하고 Money 또한 추상클래스로 지정한다.

Dollar, Franc의 존재를 클라이언트 코드에서도 알지 못하게 되었다.

하위 클래스를 테스트에서 분리(decoupling)함으로써 어떤 모델 코드에도 영향을 주지 않고 상속 구조를 마음대로 변경할 수 있게 됐다.

 

할일목록

  • $5 + 10CHF = $10(환율이 2:1일 경우)
  • $5 X 2 = $10
  • amount를 private로 만들기
  • Dollar 부작용?
  • Money 반올림?
  • equals()
  • hashCode()
  • Equal null
  • Equal object
  • 5CHF X 2 = 10CHF
  • Dollar / Franc 중복
  • 공용 equals
  • 공용 times
  • Franc와 Dollar 비교하기
  • 통화?
  • testFrancMultiplication을 지워야 할까?

정리

  • 동일한 메서드의 두 변이형 메서드 서명부를 통일시킴으로써 중복 제거를 향해 한 단계 더 전진했다.
  • 최소한 메서드 선언부만이라도 공통 상위 클래스로 옮겼다.
  • 팩토리 메서드를 도입하여 테스트 코드에서 콘크리트(??) 하위 클래스의 존재 사실을 분리했다.
  • 하위 클래스가 사라지면 몇몇 테스트는 불필요한 여분의 것이 된다는 것을 인식했다. 하지만 일단 그냥 뒀다.
Comments