타락한 객체
TDD 주기
일반적인 TDD 주기는 아래와 같이 진행한다.
테스트 작성한다.
오퍼레이션이 코드에 어떤 식으로 나타나길 원하는 지 생각해보고, 인터페이스 대한 이야기를 작성해보는 작업이다.
실행 가능하게 만든다.
이 단계에서 가장 중요한 것은 빠르게 초록 막대를 보는 것이다. 깔끔하고 단순한 해법이 명백히 보인다면 그것을 입력한다. 만약 깔끔하고 단순한 해법이지만 구현 시간이 몇 분 걸린다면 일단 적어 놓은 뒤 본래의 목적으로 돌아온다.
올바르게 만든다.
이 단계에서 이전에 시스템 동작(초록 막대)을 보기 위해 저질렀던 죄악을 수습한다. 중복을 제거하고 초록 막대로 되돌린다.
분할 정복
TDD 최종 목적은 "작동하는 깔끔한 코드"를 얻는 것이다. 작동하는 깔끔한 코드를 얻는 것은 때로는 최고의 프로그래머들 조차 도달하기 힘든 목표이며, 평범한 프로그래머들에게는 거의 불가능한 일이다. 따라서, "작동하는 깔끔한 코드"를 얻기 위해 문제를 분할하여 접근해보자. 결론부터 말하면, '작동하는 코드'를 만들고 나서 '깔끔한 코드' 로 변모시키는 것이다.
다시 다중화폐 예제에서 Dollar 부작용 테스트 돌아가 보자.
지금까지 테스트 하나를 통과했지만, 몇 가지 부자연스러운 결과를 알 수있다. Dollar 연산 수행시 Dollar 값 바뀐다는 것이다. 그러면 다시 TDD 주기의 "테스트를 작성한다." 단계에서 부터 접근을 해보자.
$5 + 10CHF = $10(환율이 2:1 일 경우)
$5 *2 = 10$amount를 private으로 만들기
Dollar 부작용(side effect)?
Money 반올림?
우선 내가 원하는 시나리오를 적어보자. five Dollar 객체에 2를 곱하고, 3을 각각 곱하면 10, 15가 되는 자연스러운 시나리오이다.