다중 통화를 지원하는 Money 객체
테스트 목록
테스트 필요한 해야할 목록을 작성한다.
$5 + 10CHF = $10(환율이 2:1 일 경우)
$5 * 2 = 10$
사용자 입장에서의 시나리오
테스트를 작성할 때는 오퍼레이션의 완벽한 인터페이스에 대해 상상해보는 것이 좋다.
즉, 오퍼레이션이 외부에서 어떤 식으로 보일 지에 대한 이야기를 테스트 코드로 적고 있는 것이다.
오퍼레이션
객체가 수행할 수 있는 연산을 의미하며, 오퍼레이션에 대한 특정한 구현을 메서드라고 부른다.
다형성을 통해, 한 오퍼레이션은 여러 메서드를 가질 수 있다.
작은 단계로 시작
위 테스트는 예기치 못한 부작용을 고려하지 않았고, 금액 계산도 정수형으로 하였다.
하지만, 우선 이러한 문제 사항들은 목록에 추가하고, 작은 단계로 시작해보는 것이 중요하다.
$5 + 10CHF = $10(환율이 2:1 일 경우)
$5 * 2 = 10$
amount를 private으로 만들기
Dollar 부작용(side effect)?
Money 반올림?
우선 컴파일 되게 만들자!
아직은 컴파일 조차 되지 않는다. 따라서 에러를 보고 하나씩 고쳐나가 보자.
문제 상황을 적어보자.
Dollar 클래스가 없음
생성자가 없음
times 메서드가 없음
amount 필드가 없음
하나씩 해결해보자. 우선 Dollar 클래스를 생성하여 첫 번째 에러를 제거한다.
하지만 생성자가 없다는 에러와 times() 메서드가 없다는 에러, amount 필드가 없다는 에러 또 다시 발생한다. 순차적으로 하나씩 에러를 제거해보자.
따라서, Dollar 클래스에 생성자를 추가하여 첫 번째 에러를 제거한다.
다음으로 times() 메서드를 위해서는 스텁 구현이 필요하며, 이를 통해 에러를 제거한다.
스텁 구현
메서드의 서명부와 반환 값을 적으며, 이 메서드를 호출하는 코드가 컴파일이 될 수 있도록 껍데기가 만들어 주는 것을 의미한다.