본문 바로가기

책읽기/TDD:ByExample

TDD_7

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으로 기꺼이 옮길 수 있다.]

 

 

 

reduce 함수를 구현하는 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