테스트 주도 개발
읽으면서 코딩도 따라 해보고 재밌습니다. AJN에서 이 책으로 스터디를 하면서 위키에 정리 중입니다. 저는 svn에 한 챕터 마다 커밋을 하고 있습니다.
프로젝트 구조는 아래 처럼 매우 단순합니다.
svn 주소는 http://agilejava.googlecode.com/svn/trunk/ 이겁니다.
목차 별로 구현한 코드 중심으로 요약하겠습니다.
1. 다중 통화를 지원하는 Money 객체 - Dollar 만들기, times() 스텁 구현, p48 의존성과 중복
2. 타락한 객체 - times() 구현 마무리.
3. 모두를 위한 평등 - equlas() 구현하기.
4. 프라이버시 - amount를 보이지 않게 하기.
5. 솔직히 말하면 - Franc 만들기.
6. 돌아온 '모두를 위한 평등' - equals()를 Money로 올리기.
7. 사과와 오렌지 - Franc과 Dollar 비교하기.
8. 객체 만들기 - Dollar와 Franc를 new가 아닌 Money의 Factory 메소드로 만들 도록 변경.
9. 우리가 사는 시간 - Dollar와 Franc을 없애기 위해서 둘을 구분한 currency를 만들어 냄.
10. 흥미로운 시간 - times()를 Money로 올리기, p103 생략된 부분 있는듯..
11. 모든 악의 근원 - Franc과 Dollar 클래스 없애기. 필요 없어진 test 없애기. p110 잘못 된 부분 있는듯...
12. 드디어, 더하기 - Expression이라는 메타포 도입하여 plus()구현 중.
13. 진짜로 만들기 - plus()는 Expression 반환하고, Expression에 Money reduce(String to) 인터페이스 만들고, Sum과 Money에서 reduce() 구현함. p126 복잡함.
14. 바꾸기 - 정말 많이 바꿨다. rate(Bank, String), Pair 클래스, Bank에서 rate 책임지기.
15. 서로 다른 통화 바꾸기 - Expression에 plus() 추가, Sum에 있는 reduce()가 재귀호출 인게 이제야 보이는 나..
16. 드디어, 추상화 - Sum에 있는 plus() 구현 마무리, Expression에 times() 추가. 맨 마지막 테스트는 실패한 것인가??