12장 드디어, 더하기
<할일>
$5 + 10CHF = $10 (1:2의 환율일 경우)
$5 + $5 = $10
더하기의 전체기능을 구현하기 어렵다.
그래서 먼저 5+5=10이라는 쉬운 기능 먼저 해본다.
사실 이 이후의 설명들이 잘 와닿지가 않는다.
편하게 여러 환율을 표현할 수 있으면서도 산술연산 비슷한 표현들을 여전히 산술 연산처럼 다룰 수 있는 해법이 있으면 좋을 것 같다.
객체가 이 역할을 한다고 한다...
[가지고 있는 객체가 우리가 원하는 방식으로 동작하지 않을경우엔 그 객체와 외부 프로토콜이 같으면서 내부 구현은 다른 새로운 객체를 만들 수 있다.]
=> Money와 비슷하게 동작하지만 사실은 두 Money의 합을 나타내는 객체를 만드는 것
이 메타포가 나오기 전의 다른 메타포의 예) Money를 지갑으로 보고 여러 화폐가 들어갈 수 있게 하는것
합을 나타내는 결과로 sum이라는 'Expression'이 생긴다.
그 후 sum(Expression)을 환율을 통해서 단일 통화로 축약(reduce)한다.
reduced = 환율이 적용된 Expression객체
bank에서 sum을 USD환율로 적용한다는 의미
1. Expression은 우리가 하려는 일의 핵심
우리의 핵심이 되는 객체가 다른 부분에 대해서 될 수 있는 한 모르도록 노력한다.
2. Expression과 관련이 있는 오퍼레이션이 많을 거라고 상상할 수 있다.
(ex . sum, sub, multi ...)
[Bank가 별 필요없게 되면, 축약을 구현할 책임을 Expression으로 기꺼이 옮길 수 있다.]
더하기 테스트를 위한 테스트를 작성했다.
이제 컴파일을 잡아보자.
실패하는 테스트를 잡기위해.
Expression을 반환하는 plus메소드를 추가.
이건 Money가 Expression을 구현해야 한다는 소리다.
implements로 구현.
그리고 빈 Bank클래스를 만든다.
정리하자면,
1. 큰 테스트를 작은 테스트로 줄여서 발전가능하도록 함. (5+5=10으로)
2. 우리에게 필요한 계산에 대한 가능한 메타포들을 고민했다.
3. 새 메타포에 기반하여 기존의 테스트를 재작성했다.
4. 테스트를 빠르게 컴파일했다.
5. 구현을 만들기 위해 필요한 리팩토링을 기대한다.
'책읽기 > TDD:ByExample' 카테고리의 다른 글
TDD_9 (0) | 2020.11.24 |
---|---|
TDD_8 (0) | 2020.11.22 |
TDD_6 (0) | 2020.11.11 |
TDD_5 (0) | 2020.11.10 |
TDD_4(값 객체 패턴) (0) | 2020.11.08 |