# 사과와 오렌지

{% 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을 구분할 수 있는 코드가 없기 때문이다.

![](/files/-Lsfgtyhm3evCKFuweif)

따라서 동치성 코드에서는 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;

![](/files/-LsfkK7iNUUAxKM4nHS0)

드디어 공용 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 %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://koseungbin.gitbook.io/wiki/books/undefined-3/1/undefined-5.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
