1부 2장 타락한 객체

< 현재 구현해야할 목록 >

  • $5 + 10CHF = $10 (환율이 2:1일 경우)
  • $5 * 2 = $10
  • amount를 private로 만들기
  • Dollar 부작용
  • Money 반올림

테스트는 통과했지만 해당 Dollar의 값이 영원히 바뀌어 버린다. 아래와 같은 기능을 사용하고 싶다.

 public void testMultiplication() {
        Dollar five = new Dollar(5);
        five.times(2);
        assertEquals(10, five.amount);
        five.times(3);
        assertEquals(15, five.amount);
}

test code와 Dollar class를 아래와 같이 바꾸면 작동한다.

public void testMultiplication() {
        Dollar five = new Dollar(5);
        Dollar product = five.times(2);
        assertEquals(10, product.amount);
        product = five.times(3);
        assertEquals(15, product.amount);
    }
    
public class Dollar {
    public int amount;

    public Dollar(int amount) {
        this.amount = amount;
    }

    public Dollar times(int multiplier) {
        return new Dollar( amount * multiplier);
    }

}

< 현재 구현해야할 목록 >

  • $5 + 10CHF = $10 (환율이 2:1일 경우)
  • $5 * 2 = $10
  • amount를 private로 만들기
  • Dollar 부작용
  • Money 반올림

위의 과정이 잘못됨을 안다. 하지만 일단 테스트를 통과하는게 우선이다. 빨리 통과하기 위해서 취할 수 있는 방법은 2가지다.

  • 가짜로 구현하기: 상수를 반환하게 만들고 진짜 코드를 얻을 때까지 단계적으로 상수를 변수로 바꾼다.
  • 명백한 구현 사용하기: 실제 구현을 입력한다.

우리가 지금까지 한 일은

  • 설계상의 결함(Dollar 부작용)을 그 결함으로 인해 실패하는 테스트로 변환
  • 스텁 구현으로 빠르게 컴파일 통과하도록 함
  • 올바르다고 생각하는 코드를 입력해서 테스트 통과

좋은 웹페이지 즐겨찾기