7장. 사과와 오렌지

변주한·2022년 6월 5일
0

앞장에서 우리는 각각의 비교를 equals() 통해서 이뤄 냈고
Money()로 캐스트를 함으로써 Franc과 Dollar의 비교에 대한 궁금증을 가지고 지금 여기 서 있다(?)

이렇게 테스트 코드를 만들어보자

	@Test
    public void testEquality(){
        assertTrue(new Dollar(5).equals(new Dollar(5)));
        assertFalse(new Dollar(5).equals(new Dollar(6)));

        assertTrue(new Franc(5).equals(new Franc(5)));
        assertFalse(new Franc(5).equals(new Franc(6)));

        assertFalse(new Franc(5).equals(new Dollar(5)));//+
    }

당연히 두개의 비교는 다르다고 나와야겠지만 우리는 Money라는 객체로 변환하여 비교하기때문에 같다고 나올것이다.

오직 금액과 클래스가 서로 동일할 때만 두 Money가 서로 같은것이다.

	public boolean equals(Object o) {
        Money money = (Money) o;
        return  amount == money.amount &&
        		getClass().equals(money.getClass());
    }
  • 우릴 괴롭히던 결함을 끄집어내서 테스트에 담아냈다.
  • 완벽하진 않지만 그럭저럭 봐줄 만한 방법 getClass()로 테스트를 통과하게 만들었다.
  • 더 많은 동기가 있기 전에는 더 많은 설계를 도입하지 않기로 했다.
profile
늦었지만 꾸준히

0개의 댓글