김동형수 개발기

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

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

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

김동형수 2022. 9. 18. 23:19

16장 드디어 추상화

할일목록

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

Expression.plus를 끝마치려면 Sum.plus를 구현해야한다.

그리고 Expression.times를 구현하면 전체 예제가 끝난다.

Sum.plus에 대한 테스트이다.

 

fiveBucks, tenFrancs를 더해서 Sum을 생성할 수도 있지만 위의 코드에서는 명시적으로 Sum을 생성하는데, 이게 더 직접적으로 우리 의도를 드러낸다.

 

할일목록

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

TDD로 구현할 땐 테스트 코드의 줄 수와 모델 코드의 줄 수가 거의 비슷한 상태로 끝난다.

TDD가 경제적이긴 위해서 매일 만들어 내는 코드가 2배가 되거나 동일한 기능을 절반의 줄 수로 구현해야 한다.

TDD vs 자신의 방법 비교해야한다.

디버깅, 통합 작업, 다른 사람에게 설명하는 데 걸리는 시간 등의 요소를 반드시 포함해야 한다.

 

Expression.times를 interface에 선언하고 Sum, Money에서 public으로 구현했다.

 

할일목록

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

 

$5 + $5 = $10 에 대한 테스트를 작성했다.

깔끔하지 않은 방법(instanceof 같음)으로 작성한 테스트를 저자는 마음에 들어 하지 않았다.

 

정리

  • 미래에 코드를 읽을 다른 사람들을 염두에 둔 테스트를 작성했다.
  • TDD와 여러분의 현재 개발 스타일을 비교해 볼 수 있는 실험 방법을 제시했다.
  • 또 한 번 선언부에 대한 수정이 시스템 나무지 부분으로 번져갔고, 문제를 고치기 위해 역시 컴파일러의 조언을 따랐다.
  • 잠시 실험을 시도했는데, 제대로 되지 않아서 버렸다.
Comments