// Franc Class Franc times(int multiplier){ returnnew Franc(amount * multiplier); } // Dollar Class Dollar times(int multiplier){ returnnew Dollar(amount * multiplier); }
양쪽 모두 Money 를 반환하게 만들면 더 비슷해진다.
1 2 3 4 5 6 7 8 9
// Franc Class Money times(int multiplier){ returnnew Franc(amount * multiplier); } // Dollar Class Money times(int multiplier){ returnnew Dollar(amount * multiplier); }
이제, Money 의 두 하위 클래스는 많은 일을 하지 않으므로 제거하고 싶다. 한번에 이렇게 큰 단계를 밟는 것은 TDD 를 효과적으로 보여주기 적절치 않을 것 같다. 하위 클래스에 대한 직접적인 참조가 적어지면 하위 클래스를 제거하기 쉬울 것 같다.
1 2 3 4 5 6 7
@Test voidtestMultiplication(){ Dollar five = Money.dollar(5); assertEquals(new Dollar(10), five.times(2)); assertEquals(new Dollar(15), five.times(3)); }
구현 코드는 Dollar 를 생성해 반환한다.
1 2 3 4
// Money Class static Dollar dollar(int amount){ returnnew Dollar(amount); }