김동형수 개발기

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

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

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

김동형수 2022. 9. 18. 13:41

14장 바꾸기

할일목록

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

프랑, 달러간의 환전을 다룬다.

 

작가는 프랑을 달러로 변환할 때 나누기 2를 한다.

 

테스트를 통과하기 위한 reduce 메서드 구현

 

위 코드에서 Money가 환율(rate)에 대해 알게되었다. 환율에 대한 일은 모두 Bank가 처리해야 한다.

 

호출 부분

 

구현 부분

 

인터페이스에 선언된 메서드는 공용이어야 하므로 Money의 reduce()도 공용이어야 한다

공용..? public..? 번역..ㅆ

 

이제(Bank를 매개변수로 넘기기 때문에) 환율은 Bank에서 계산할 수 있게 됐다.

 

환율을 상수로 선언한게 작가는 보기 싫은가보다.

환율을 위한 객체를 새로 생성하기로 한다.

 

Pair를 키로 쓸거기 때문에 equals() hashcode() 메서드를 구현해야 한다.

리펙토링 중에 코드를 작성하는 것이기 때문에 테스트를 작성하지는 않을 것이다.

 

hashcode메서드에서 0을 반환하는 것은 최악이다. 하지만 빠르게 달릴 수 있도록 도와준다.

해시코드를 이대로 둔다면 해시 테이블에서 검색 시 선형 검색과 비슷하게 수행될 것이다.

나중에 많은 통화를 다뤄야할 일 이 생기면 개선하게 될 것이다.

 

Bank에서 환율을 저장하고, 설정하고, 반환한다.

 

할일목록

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

정리

  • 필요할 거라고 생각한 인자를 빠르게 추가했다.
  • 코드와 테스트 사이에 있는 데이터 중복을 끄집어냈다.
  • 자바의 오퍼레이션에 대한 가정을 검사해보기 위한 테스트를 작성했다.
  • 별도의 테스트 없이 전용 도우미 클래스를 만들었다.
  • 리팩토링을하다가 실수를 했고, 그 문제를 분리하기 위해 또 하나의 테스트를 작성하면서 계속 전진해 가기로 했다.
Comments