김동형수 개발기

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

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

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

김동형수 2022. 9. 23. 14:37

9장 우리가 사는 시간

 

할일목록

  • $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을 지워야 할까?

통화 개념 테스트 및 구현

경량 팩토리를 사용할 수 있다. 하지만 당분간은 대신 문자열을 사용한다.

Dollar, Franc 동일한 구현 후 공통 상위 클래스에 관련 내용을 push up 한다.

 

통화를 인스턴스 변수에 저장하길 원한다.

 

두 currency가 동일하므로 변수 선언과 currency()를 공통 클래스인 Money로 Push up 한다.

그리고 통화문자열을 정적 팩토리 메서드로 옮긴다면 두 생성자가 동일해질 것이고 그렇다면 공통 구현을 만들 수 있을 것이다.

 

Franc.times에서 Money.franc인 스태틱 메서드를 호출해야하지만 지금 하는 일 ( 통화 추가 ) 가 끝나지 않았기 때문에 일이 끝날 때 까지 기다린다.

하던 일을 중단하고 다른 일을 하게 되면, 그 다른 일이 끝날 때 까지는 중단하지 않는다.

 

저자는 무조건 작은 단계로 진행하라고 말하는 것은 아니고 이런 식으로 진행할 수도 있어야 한다고 말한다. ( 경우에 따라 위 방법으로 진행해야 더 좋은 결과가 있을 수 있다는 경험에서 비롯된 의견인듯 )

큰 단계를 작업하려다가 다시 작은 단계로 돌아왔다.

 

Dollar에도 동일하게 적용해준다. 

 

이제 상위클래스에 올린다.

 

할일목록

  • $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을 지워야 할까?

 

정리

  • 큰 설계 아이디어를 다루다가 조금 곤경에 빠졌다. 그래서 좀 전에 주목했던 더 작은 작업을 수행했다.
  • 다른 부분들을 호출자(팩토리 메서드)로 옮김으로써 두 생성자를 일치시켰다.
  • times()가 팩토리 메서드를 사용하도록 만들기 위해 리팩토링을 잠시 중단했다.
  • 비슷한 리팩토링(Franc에 했던 일을 Dollar에도 적용)을 한번의 큰 단계로 처리했다.
  • 동일한 생성자들을 상위 클래스로 올렸다
Comments