5장. 솔직히 말하자면

변주한·2022년 6월 5일
0

$5 + 10 CHF = $10(환율이 2:1일 경우)
$5 X 2 = $10
aount를 private으로 만들기
Dollar 부작용(side effect)?
Money 반올림
equals()
hashcode()
Equal null
Equal object

이목록에서 첫번째 테스트에 어떤 식으로 접근해야할까?

일단 첫번째 테스트를 실행하려면 Franc(프랑)이라는 객체가 필요한 것 같다.

$5 + 10 CHF = $10(환율이 2:1일 경우)
$5 X 2 = $10
amount를 private으로 만들기
Dollar 부작용(side effect)?
Money 반올림
equals()
hashcode()
Equal null
Equal object
5CHF X 2 = 10CHF

두번째 테스트를 만들었듯이 Franc(프랑)에 대한 테스트를 만들어보자

	@Test
    public void testFrancMultiplication(){
        Franc five = new Franc(5);
        assertEquals(new Franc(10), five.times(2));
        assertEquals(new Franc(15), five.times(3));
    }

... 뭔가 복붙은 개발자가 아니야 빼액 하는소리가 여기까지 들리는 것같지만 모르겠다 일단 진행해보겠다.

우리 주기에는 서로 다른 단계들이 있다.

  1. 테스트 작성
  2. 컴파일되게 하기.
  3. 실패하는지 확인하기 위해 실행.
  4. 실행하게 만듦.
  5. 중복 제거.

처음 네 단계는 빨리 진행해야 한다.
그렇게 되면 새 기능이 포함되더라도 잘 알고 있는 상태에 이를 수 있다.

그다음은... 좀 걱정이 될것이다.
적절한 시기에 적절한 설계를 돌아가게 만들고, 올바르게 만들어라.

아직 죄는 지고 있지만 다음장에서 차차해보기로 하고 넘어가자!

public class Franc {
    private int amount;

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

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

    @Override
    public boolean equals(Object o) {
        Franc franc = (Franc) o;
        return amount == franc.amount;
    }

}

검토해보면 우리는

  • 큰 테스트를 공략할 수 없다. 그래서 진전을 나타낼 수 있는 자그마한 테스트를 만들었다.
  • 뻔뻔스럽게도 중복을 만들고 조금 고쳐서 테스트를 작성했다.
  • 설상가상으로 모델 코드까지 도매금으로 복사하고 수정해서 테스트를 통과했다.
  • 중복이 사라지기 전에는 집에 가지 않겠다고 약속했다.

$5 + 10 CHF = $10(환율이 2:1일 경우)
$5 X 2 = $10
amount를 private으로 만들기
Dollar 부작용(side effect)?
Money 반올림
equals()
hashcode()
Equal null
Equal object
5CHF X 2 = 10CHF
Dollar/Franc 중복
공용 equals
공용 times

뭔가 하나를 해결하니 숙제가 더 생기는것 같지만... 기분탓이다

profile
늦었지만 꾸준히

0개의 댓글