π 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
λ₯Ό μ§μ λΉκ΅ν μ μκ² λλ€.