김동형수 개발기

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

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

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

김동형수 2022. 9. 14. 02:19

13장 진짜로 만들기

할일목록

  • $5 + 10CHF = $10(환율이 2:1일 경우)
  • $5 + $5 = $10

가짜 구현에서 진짜 구현하는데 어떻게 거꾸로 작업해야하는지 명확하지 않다.

조금 불확실하지만 순방향으로 작업해보자.

 

할일목록

  • $5 + 10CHF = $10(환율이 2:1일 경우)
  • $5 + $5 = $10
  • $5 + $5에서 Money 반환하기

 

두 Money의 합을 연산을 하는 내용은 Expression의 구체 클래스인 Sum에 피가산수/가산수를 통해서 정보를 알 수 있고 Bank.reduce메서드에서 이 Sum의 값을 읽고 피가산수/가산수의 통화단위가 같은지 확인 후 같을경우 Money를 반환한다.

 

테스트 통과를 유지하면서 리펙토링을 진행하도록 한다.

Money 클래스에서도 reduce를 구현하게 하고 Expression 인터페이스를 구현하도록 수정한다.

 

Bank.reduce()에서 expression의 Money class instanceof 결과값에 따라 분기처리를 해준다.

Bank 클래스에서 메서드오버로딩을 통해 reduce(String) - 환전용, reduce(Expression, String) - 연산 후 환전용 의 2개의 메서드로 나눈다.

 

저자는 Java에서 이러한 경우에 만족할 만한 일반적인 해법을 찾지 못했다고 한다.

 

할일목록

  • $5 + 10CHF = $10(환율이 2:1일 경우)
  • $5 + $5 = $10
  • $5 + $5에서 Money 반환하기
  • Bank.reduce(Money)
  • Money에 대한 통화 변환을 수행하는 Reduce
  • Reduce(Bank, String)

정리

  • 모든 중복이 제거되기 전까지는 테스트를 통과한 것으로 치지 않았다.
  • 구현하기 위해 역방향이 아닌 순방향으로 작업했다.
  • 앞으로 필요할 것으로 예상되는 객체(Sum)의 생성을 강요하기 위한 테스트를 작성했다.
  • 빠른 속도로 구현하기 시작했다(Sum의 생성자).
  • 일단 한 곳에 캐스팅을 이용해서 코드를 구현했다가, 테스트가 돌아가자 그 코드를 적당한 자리로 옮겼다.
  • 명시적인 클래스 검사를 제거하기 위해 다형성을 사용했다.
Comments