11장. 모든 악의 근원
- 할일 목록
$5 + 10CHF = $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
Franc과 Dollar 비교하기
통화?
testFrancMultiplication 제거
class Dollar(amount: Int, currency: String) : Money(amount, currency)
class Franc(amount: Int, currency: String) : Money(amount, currency)
두 하위 클래스 Dollar와 Franc에는 생성자 밖에 없다. 코드의 의미를 변경하지 않으면서 하위 클래스에 대한 참조를 상위 클래스에 대한 참조로 변경할 수 있다.
companion object {
fun dollar(amount: Int): Money {
return Money(amount, "USD")
}
fun franc(amount: Int): Money {
return Money(amount, "CHF")
}
}

위처럼 Franc에 대한 참조는 하나도 남아있지 않지만 Dollar는 이전에 작성한 테스트 코드에서 아직 참조하고 있다.
@Test
fun testDifferentClassEquality() {
assertEquals(Money(10, "USD"), Dollar(10, "USD"))
}
위 테스트를 지워도 될 정도로 동치성 테스트를 충분히 하고 있는지 살펴보자.
@kotlin.test.Test
fun testEquality() {
assertEquals(Money.dollar(5), Money.dollar(5))
assertNotEquals(Money.dollar(5), Money.dollar(6))
assertEquals(Money.franc(5), Money.franc(5))
assertNotEquals(Money.franc(5), Money.franc(6))
assertFalse(Money.franc(5) == Money.dollar(5))
}
충분한 것 같으니 Dollar를 참조하고 있는 테스트를 지우고, 기존 동치성 테스트에서 중복되는 단언도 제거하자.
@kotlin.test.Test
fun testEquality() {
assertEquals(Money.dollar(5), Money.dollar(5))
assertNotEquals(Money.dollar(5), Money.dollar(6))
assertNotEquals(Money.franc(5), Money.dollar(5))
}
- 할일 목록
$5 + 10CHF = $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
Franc과 Dollar 비교하기
통화?
testFrancMultiplication 제거
Last modified: 31 January 2024