> For the complete documentation index, see [llms.txt](https://koseungbin.gitbook.io/wiki/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://koseungbin.gitbook.io/wiki/books/undefined-3/1/undefined-5.md).

# 사과와 오렌지

{% tabs %}
{% tab title="테스트 목록" %}

* $5 + 10CHF = $10(환율이 2:1 일 경우) &#x20;
* ~~*$5 \** 2 = 10$~~&#x20;
* \~\~*amount를 private으로 만들기* \~\~&#x20;
* ~~Dollar 부작용(side effect)?~~&#x20;
* Money 반올림?
* ~~equals()~~
* hashCode()
* Equal null
* Equal object
* ~~5CHF \* 2 = 10CHF~~
* Dollar/Franc 중복
* ~~공용 equals~~
* 공용 time
* **Franc과 Dollar 비교하기**
  {% endtab %}
  {% endtabs %}

이전 장 "공용 equals"  만들며 추가된 테스트 항목인 "Franc과 Dollar 비교하기" 를 진행해보자.

우선, 테스트 시나리오를 추가해보자.

```java
@Test
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)));
    assertFalse(new Dollar(5).equals(new Franc(5)));

}
```

�테스트 결과는 실패이다. 이유는 동치성 코드에 Franc 와 Dollar을 구분할 수 있는 코드가 없기 때문이다.

![](https://1360705058-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LZ0r85EEFTHmLyxK8ag%2F-Lsfeq_8f_DNRy6Kfx5D%2F-Lsfgtyhm3evCKFuweif%2Fimage.png?alt=media\&token=65e3f57e-1c96-42f1-b1b2-70906d222a7b)

따라서 동치성 코드에서는 Dollar, Franc 두 타입간의 비교가 이루어지고 있는 지 확인해야 한다.

```java
public boolean equals(Object object) {
    Money money = (Money) object;
    return amount == money.amount;

}
```

�Money 하위 타입 간 비교는 전혀 이루지고 있지 않다.&#x20;

따라서 "클래스 동일 여부" 대한 코드를 추가하여  타입 비교를 하도록 리팩토링을 해보자.

```java
public boolean equals(Object object) {
    Money money = (Money) object;
    return amount == money.amount && getClass().equals(money.getClass());

}
```

테스트가 통과하는 것을 확인할 수 있다.&#x20;

![](https://1360705058-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LZ0r85EEFTHmLyxK8ag%2F-Lsfeq_8f_DNRy6Kfx5D%2F-LsfkK7iNUUAxKM4nHS0%2Fimage.png?alt=media\&token=5c2ab3b9-d7cd-42b4-990a-598a4f06f44b)

드디어 공용 equals로 만드는 과정에서 발생했던 결함을 테스트로 담아내어 해결하였다. 해당 항목을 할일 항목에서 제거하자.

{% tabs %}
{% tab title="테스트 목록" %}

* $5 + 10CHF = $10(환율이 2:1 일 경우) &#x20;
* ~~*$5 \** 2 = 10$~~&#x20;
* \~\~*amount를 private으로 만들기* \~\~&#x20;
* ~~Dollar 부작용(side effect)?~~&#x20;
* Money 반올림?
* ~~equals()~~
* hashCode()
* Equal null
* Equal object
* ~~5CHF \* 2 = 10CHF~~
* Dollar/Franc 중복
* ~~공용 equals~~
* 공용 time
* ~~Franc과 Dollar 비교하기~~
* 통화?
  {% endtab %}
  {% endtabs %}
