본문으둜 κ±΄λ„ˆλ›°κΈ°

🌈 Chapter 11: λͺ¨λ“  μ•…μ˜ 근원

두 ν•˜μœ„ 클래슀 Dollar와 Francμ—λŠ” λ‹¬λž‘ μƒμ„±μžλ°–μ— μ—†λ‹€. 단지 μƒμ„±μž λ•Œλ¬Έμ— ν•˜μœ„ ν΄λž˜μŠ€κ°€ μžˆμ„ ν•„μš”λŠ” μ—†κΈ° λ•Œλ¬Έμ— ν•˜μœ„ 클래슀λ₯Ό μ œκ±°ν•˜λŠ” 게 μ’‹κ² λ‹€.

μ½”λ“œμ˜ 의미λ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠμœΌλ©΄μ„œλ„ ν•˜μœ„ ν΄λž˜μŠ€μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό μƒμœ„ ν΄λž˜μŠ€μ— λŒ€ν•œ 참쑰둜 λ³€κ²½ν•  수 μžˆλ‹€. 일단 Money.franc()을 고치자.

// Money
static Money franc(int amount) {
return new Money(amount, "CHF");
}

그리고 Money.dollar()도.

static Money dollar(int amount) {
return new Money(amount, "USD");
}

이제 Dollar에 λŒ€ν•œ μ°Έμ‘° ν•˜λ‚˜λ„ 남아 μžˆμ§€ μ•ŠμœΌλ―€λ‘œ Dollarλ₯Ό μ§€μšΈ 수 있게 됐닀. λ°˜λ©΄μ— Franc은 μš°λ¦¬κ°€ μž‘μ„±ν–ˆλ˜ ν…ŒμŠ€νŠΈ μ½”λ“œμ—μ„œ 아직 μ°Έμ‘°ν•œλ‹€.

public void testDifferentClassEquality() {
assertTrue(new Money(10, "CHF").equals(
new Franc(10, "CHF")
));
}

이 ν…ŒμŠ€νŠΈλ₯Ό μ§€μ›Œλ„ 될 μ •λ„λ‘œ λ‹€λ₯Έ κ³³μ—μ„œ λ™μΉ˜μ„± ν…ŒμŠ€νŠΈλ₯Ό μΆ©λΆ„νžˆ ν•˜κ³  μžˆλŠ”κ°€? λ‹€λ₯Έ λ™μΉ˜μ„± ν…ŒμŠ€νŠΈλ₯Ό ν•œλ²ˆ 보자.

public void testEquality() {
assertTrue(Money.dollar(5).equals(Money.dollar(5)));
assertFalse(Money.dollar(5).equals(Money.dollar(6)));
assertTrue(Money.franc(5).equals(Money.franc(5)));
assertFalse(Money.franc(5).equals(Money.franc(6)));
assertFalse(Money.franc(5).equals(Money.dollar(5)));
}

μΆ©λΆ„ν•œ ν…ŒμŠ€νŠΈμΈ 것 κ°™λ‹€. 사싀 μ’€ κ³Όν•˜λ‹€. μ„Έ λ²ˆμ§Έμ™€ λ„€ 번째 단언은 첫 번째, 두 번째 단언과 μ€‘λ³΅λ˜λ―€λ‘œ μ§€μš°λŠ” 게 μ’‹κ² λ‹€.

public void testEquality() {
assertTrue(Money.dollar(5).equals(Money.dollar(5)));
assertFalse(Money.dollar(5).equals(Money.dollar(6)));
assertFalse(Money.franc(5).equals(Money.dollar(5)));
}

클래슀 λŒ€μ‹  currencyλ₯Ό λΉ„κ΅ν•˜λ„λ‘ κ°•μš”ν•˜λŠ” ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” μ—¬λŸ¬ ν΄λž˜μŠ€κ°€ μ‘΄μž¬ν•  λ•Œλ§Œ 의미 μžˆλ‹€. Franc 클래슀λ₯Ό μ œκ±°ν•˜λ €λŠ” 쀑이기 λ•Œλ¬Έμ— Franc이 μžˆμ„ κ²½μš°μ— μ‹œμŠ€ν…œμ΄ μž‘λ™ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” ν…ŒμŠ€νŠΈλŠ” 도움이 되고 였히렀 짐이 λœλ‹€. Franc와 ν•¨κ»˜ testDifferentClassEqualityλ₯Ό λ³΄λ‚΄λ²Όλ¦¬μž.