[테스트 주도 개발] 2장_타락한 객체
TDD 주기는 다음과 같다.
- 테스트를 작성한다.
- 실행가능하게 만든다.
- 올바르게 만든다. (중복 제거)
“작동하는 깔끔한 코드” 를 얻어야한다는 전체 문제 중에서, “작동하는” 에 해당하는 부분을 먼저 해결해라.
테스트를 하나 통과했지만, Dollar 에 대한 연산을 수행한 후에 해당 Dollar 의 값이 바뀌는 것이 이상하다.
1 | void testMultiplication() { |
times() 를 처음 호출한 이후에 product 는 더이상 5가 아니다. times() 가 새로운 객체를 반환하면 어떨까 ?
1 | void testMultiplication() { |
1 | class Dollar { |
위 코드는 컴파일되지만 실행되지 않는다. 통과를 위해서는 올바른 금액을 갖는 새 Dollar 를 반환해야한다.
1 | class Dollar { |
최대한 빨리 초록색을 보기 위한 방법이 있다.
가짜로 구현하기
상수를 반환하게 만들고 진짜 코드를 얻을 때 까지 단계적으로 상수를 변수로 바꾸어간다.명백한 구현 사용하기
실제 구현을 입력한다.
보통 실무에서는 두 방법을 번갈아 사용한다.
- 모든일이 잘 진행되고 뭘 입력할지 알 때는 병백한 구현을 더해나간다.
- 예상치 못한 빨간 막대를 만나면 가짜로 구현하는 방법을 사용하면서 올바른 코드르 리펙토링한다.
- 그리고 다시 자신감을 찾으면 명백한 구현을 사용한다.
테스트 주도 개발 <켄트 벡>