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

🌈 Chapter 3: λͺ¨λ‘λ₯Ό μœ„ν•œ 평등

μ§€κΈˆ Dollar 객체같이 객체λ₯Ό κ°’μ²˜λŸΌ μ“Έ 수 μžˆλŠ”λ° 이것을 κ°’ 객체 νŒ¨ν„΄(value object pattern)이라고 ν•œλ‹€. κ°’ 객체에 λŒ€ν•œ μ œμ•½μ‚¬ν•­ 쀑 ν•˜λ‚˜λŠ” 객체의 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜κ°€ μƒμ„±μžλ₯Ό ν†΅ν•΄μ„œ 일단 μ„€μ •λœ ν›„μ—λŠ” κ²°μ½” λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것이닀.
κ°’ 객체λ₯Ό μ‚¬μš©ν•˜λ©΄ 별칭 λ¬Έμ œμ— λŒ€ν•΄ κ±±μ •ν•  ν•„μš”κ°€ μ—†λ‹€λŠ” μ•„μ£Ό 큰 μž₯점이 μžˆλ‹€. κ°’ 객체가 μ•”μ‹œν•˜λŠ” 것 쀑 ν•˜λ‚˜λŠ” 2μž₯μ—μ„œμ™€ 같이 λͺ¨λ“  연산은 μƒˆ 객체λ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€λŠ” 것이닀. λ˜λ‹€λ₯Έ μ•”μ‹œλŠ” κ°’ κ°μ²΄λŠ” equals()λ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€λŠ” 것이닀.

λ§Œμ•½ Dollarλ₯Ό ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ ν‚€λ‘œ μ“Έ 생각이라면 equals()λ₯Ό κ΅¬ν˜„ν•  λ•Œμ— hashCode()λ₯Ό 같이 κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€. 이것을 할일 λͺ©λ‘μ— 적어 놓고 이것 λ•Œλ¬Έμ— λ¬Έμ œκ°€ 생기면 κ·Έλ•Œ 닀루도둝 ν•˜μž.

public void testEquality() {
assertTrue(new Dollar(5).equals(new Dollar(5)));
}

λΉ¨κ°„ λ§‰λŒ€λ‹€. κ°€μ§œλ‘œ κ΅¬ν˜„ν•˜λŠ” 방법은 λ‹¨μˆœνžˆ trueλ₯Ό λ°˜ν™˜ν•˜λŠ” 것이닀.

public boolean equals(Object object) {
return true;
}

μ‚Όκ°μΈ‘λŸ‰μ„ ν•˜κΈ° μœ„ν•΄ 두 번째 μ˜ˆμ œκ°€ ν•„μš”ν•˜λ‹€. $5 != $6을 ν•΄λ³΄λŠ”κ²Œ μ–΄λ–¨κΉŒ?

public void testEquality() {
assertTrue(new Dollar(5).equals(new Dollar(5)));
assertTrue(new Dollar(5).equals(new Dollar(6)));
}

이제 λ™μΉ˜μ„±(equality)을 μΌλ°˜ν™”ν•΄μ•Ό ν•œλ‹€.

public boolean equals(Object object) {
Dollar dollar = (Dollar) object;
return amount == dollar.amount;
}

λ‚΄κ°€ μƒκ°ν•˜κΈ°μ— μ‚Όκ°μΈ‘λŸ‰μ€ 쑰금 μ΄μƒν•œ 면이 μžˆλ‹€. κ·Έλž˜μ„œ λ‚˜λŠ” μ–΄λ–»κ²Œ λ¦¬νŒ©ν† λ§ν•΄μ•Ό ν•˜λŠ”μ§€ μ „ν˜€ 감이 μ•ˆ 올 λ•Œλ§Œ μ‚Όκ°μΈ‘λŸ‰μ„ μ‚¬μš©ν•œλ‹€. μ½”λ“œμ™€ ν…ŒμŠ€νŠΈ μ‚¬μ΄μ˜ 쀑볡을 μ œκ±°ν•˜κ³  일반적인 해법을 ꡬ할 방법이 보이면 κ·Έλƒ₯ κ·Έ λ°©λ²•λŒ€λ‘œ κ΅¬ν˜„ν•œλ‹€. μ™œ ν•œλ²ˆμ— 끝낼 수 μžˆλŠ” 일을 두고 λ˜λ‹€λ₯Έ ν…ŒμŠ€νŠΈλ₯Ό λ§Œλ“€μ–΄μ•Ό ν•˜λŠ”κ°€?

κ·ΈλŸ¬λ‚˜ 섀계λ₯Ό μ–΄λ–»κ²Œ 할지 λ– μ˜€λ₯΄μ§€ μ•Šμ„ λ•Œλ©΄, μ‚Όκ°μΈ‘λŸ‰μ€ 문제λ₯Ό 쑰금 λ‹€λ₯Έ λ°©ν–₯μ—μ„œ 생각해볼 기회λ₯Ό μ œκ³΅ν•œλ‹€. μ§€κΈˆ μ„€κ³„ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ΄ μ–΄λ–€ λ³€ν™” κ°€λŠ₯성을 지원해야 ν•˜λŠ”κ°€? λͺ‡λͺ‡ 뢀뢄을 λ³€κ²½μ‹œμΌœλ³΄λ©΄ 닡이 쒀더 λͺ…ν™•ν•΄μ§ˆ 것이닀.

자, 동일성 λ¬Έμ œλŠ” μΌμ‹œμ μœΌλ‘œ 해결됐닀. ν•˜μ§€λ§Œ 널 κ°’μ΄λ‚˜ λ‹€λ₯Έ 객체듀과 λΉ„κ΅ν•œλ‹€λ©΄ μ–΄λ–»κ²Œ 될까? 이런 상황은 일반적이긴 ν•˜μ§€λ§Œ, μ§€κΈˆ λ‹Ήμž₯은 ν•„μš”ν•˜μ§€ μ•Šλ‹€. λ”°λΌμ„œ 할일 λͺ©λ‘μ— 적어 λ‘κΈ°λ§Œ ν•˜μž.
이제 λ™μ§ˆμ„± κΈ°λŠ₯을 κ΅¬ν˜„ν–ˆμœΌλ―€λ‘œ Dollar와 Dollarλ₯Ό 직접 비ꡐ할 수 있게 됐닀.