μλ°λ§ 곡λΆνλ€κ³ μκ°ν΄λ λ μ λλ‘ μλ°μλ§ μκ°μ ν¬μν ν μ£Όμλ€. κ·Έλ°λ° μκ°λ³΄λ€ μ§λλ₯Ό λκ°μ§ λͺ»ν΄μ μμ¬μ λ€. μ²μ λ°°μ°λ κ°λ λ€μ΄λ μ©μ΄λ€μ΄ λ§μκΈ°μ μ§λκ° λλκ² λκ°κΈ° μμνλ€.
λλ΅ 2κ°μ§μ λͺ©νλ‘ κ³΅λΆλ₯Ό μμνλ€.
- κ°λ λμΉμ§ μκΈ°
- μμ λ₯Ό μ¬λ¬λ² νκΈ°
μμ μλ¬Έμ ν΄κ²°νκΈ° μν΄ μ€λͺ
λ λΆλΆμΈλ° λΆμ‘±νμ¬ μ°Ύμ λ³Έκ²μ μ¬μ§μΌλ‘ μ 리ν΄λ³΄μ
λλ΅ μ΄λ° κ·Έλ¦ΌμΌλ‘ μλ°μ λ©μλκ° νμ©λλλ° μλ°λ νΉμ΄νκ² λͺ¨λ λ©μλλ₯Ό μ¬μ©νκΈ°μ μ vtable(virtual table)μ κ±°μΉλ€. νλ§λλ‘ κ° ν΄λμ€λ§λ€ κ°κ°μ κ°μ ν μ΄λΈμ κ°μ§κ³ μ¬μ μλ λ©μλ, μ μλμ§ μμ λ©μλλ‘ λλμ΄ κ°κ°μ λͺ λ Ήμ΄ setμ΄ μλ μ£Όμλ₯Ό μ°Ύμμ€λ€. λ¬Όλ‘ μ΄λ° κ³Όμ μ νλ‘κ·Έλλ°μ΄ μ€νλλ κ³Όμ μμ μκ°μ λ§μ΄ μ‘μλ¨Ήκ² λμ§λ§ μ¬μ©μκ° μ½λ©μ νλ κ³Όμ μμ μμκ³Ό μ€λ²λΌμ΄λ©κ³Ό κ°μ λΆλΆμμ ν° μ΄μ μ κ°μ§κ² λλ€.
λͺ¨λ ν΄λμ€μ μμ ν΄λμ€μ΄κ³ μ¬λ¬κ°μ§ λ©μλκ° μ‘΄μ¬νλ©° λ΄κ° μ΄λ° κ²λ€μ λͺΈμΌλ‘ νλνλ μ΅νκ°λ κ³Όμ μ κ²ͺμ΄μΌ ν κ² κ°λ€. μ§κΈ μ 리νκ³ μ νλ κ²μ equals()μ hashCode()μ λλ€.
equals()λ λ Όλ¦¬μ λμΌμ±μ μ»΄ν¨ν°μκ² μλ €μ€ μ μλ€λ κ²μ΄λ€. μ λ³΄κ° λ€λ₯Έ κ°μ²΄λ€λ λ΄κ° μνλ νΉμ± νλλ‘ κ°μμ§ μλμ§ κ΅¬λΆν μ μλ€λ κ²μ΄ μ’μ κ² κ°λ€.
hashCode()λ μμ equals()μ μ§μΌλ‘ μ°μ΄λ©° λ Όλ¦¬μ μΌλ‘ κ°μλ° λ¬΄μμ λ Όλ¦¬μ μΌλ‘ λΉκ΅νλ? λ₯Ό λνλλ€κ³ μκ°νλ©΄ λ κ² κ°λ€. λ΄κ° μ΄λ€ νΉμ±μ κΈ°μ€μΌλ‘ κ°μμ§ μλμ§λ₯Ό νλ³νλμ§ κ·Έ νΉμ±μ λ°νν΄ μ£Όλ©΄ λλ€.
λ΄κ° λͺ¨λ₯΄λ κ°λ λ€μ΄ λμ€λ©΄μ 곡λΆνλ λ°©μμ λ°κΎΈκ² λμλ€.
- λ¨Όμ μ½λ© μμ μ μ΄λ¦λ§ λ³΄κ³ λμ μκ°λλ‘ κ΅¬νν΄ λ³΄κΈ°
- κ°μμ ν¨κ» λ°λΌκ°λ©° λ΄κ° νλ μ½λλ₯Ό μμ νλ©° μ½λ©νκΈ°
- μ½λ©μ μ€νμν€λ μ€ν λΆλΆ(Test)λ§ λ¨κΈ°κ³ μ§μ λ€κ° λ€μ μλΆλΆ μ½λ©νκΈ°
π λ©λͺ¨λ¦¬ κ΄λ ¨ λΆλΆμ μ΄μ μ 곡λΆλ₯Ό ν λμ 보긴ν΄λ μμ§μ μ΄λ ΅λ€. κ±°κΈ°λ€κ° μμ§μ λ΄κ° λͺ¨λ₯΄λ κ°λ (λ°μΈλ©) κ°μ κ²λ€μ΄ μμ΄μ μ‘°κΈ λ²κ²λ€.
π λ°°μ΄μ μλ λΆλΆλ€μ΄ μμλκΈ° μμν΄μ μ΄ν΄νλλ° λ§μ μ΄λ €μμ κ²ͺκ³ μλ€. μμΌλ‘λ μ²μ λ°°μ°λ κ²λ€ λΏμ΄κΈ°μ μ¬λ¬ λ² λ³΄λ κ²½μ°κ° λ§μμ ν¬μνλ μκ°μ λΉν΄ μ§λκ° λλκ² λκ° κ² κ°λ€.
β μμ λ₯Ό 3λ² νΈλ λ°©μμ νκΈ° μμνκ² μ’μ κ² κ°λ€. νμ€ν κ°λ μ λΆλΆμ ν¬κ² λμμ΄ λλ κ² κ°λ€. λ΄κ° μ²μ μκ°νλ λ°©μμ΄λ μ€μ λ°©μμ μ°¨μ΄λ₯Ό νμ€ν μκ²λμ΄ μ΄λ¦Όμ§μ μκ³ λμ΄κ°μ§ μκ² λμλ€.
β κ°λ μ΄λ μ©μ΄ λΆλΆμ νμ€νκ² κ³΅λΆν΄μκΈ°μ λͺ¨λ₯΄λ λΆλΆμ μ€λͺ μ λ£κ±°λ ꡬκΈλ§μ ν΅ν΄ μ 보λ₯Ό μ°Ύμ λ μ΄λ €μμ κ²ͺλ λΉλκ° μ μ μ€κ³ μλ€. μλ κ²μ΄ λ§μμ§ μλ‘ λͺ¨λ₯΄λ κ²μ λ°°μΈ λ μ½κ² λ°°μΈ μ μμ κ² κ°λ€.
πΏ μ²μ λ£λ λΆλΆλ€μ΄ μμμ Έ λμ€κΈ°μ μμΌλ‘ κ±±μ μ΄ λ§μ΄λλ€. 첫 νλ‘κ·Έλλ° κ³΅λΆλ₯Ό νλ λ μκ°νλ μΈκ³μ΄λ₯Ό λ£λ κΈ°λΆμ΄λΌλ κ²μ μ€λλ§μ λκ»΄λ΄€λ€. λͺ¨λ₯΄λ μ©μ΄λ κ°λ
μ΄ νμ΄λμ€λ©΄ λΉν©μ€λ½κ³ μ μ΄λ κ² λλ μ§ μ¬λ¬λ² κ°μλ₯Ό λλ €λ³΄κ±°λ ꡬκΈλ§μΌλ‘ μ°Ύλ μκ°μ΄ λκ³ μλ€.
πΏπΏ μ΄λ κ² μ§λκ° μ²μ²ν λκ°κΈ° μμνλκΉ λκ° κ²μλ¬ μ§κΈ° μμνλ€. 곡λΆνλ 보λμ΄ μ½κ°μ© μ€κ³ μλ€. μκ°μ΄ λμ½ν΄μ§μ§ μκΈ° μν΄ λ
Έλ ₯ν΄μΌνλ€.
π κ·Έλλ "λ°°μ΄λ§νΌ 보μΈλ€" λΌλ λ§μ΄ μλ―μ΄ λ΄κ° μλ κ²μ΄ λ§μμ§λ ꡬκΈλ§μ νλ λΆλΆμ μμ΄μ νμ€νκ² μ΄ν΄νλ λΆλΆμ΄ λμλ€. μ΄μ μλ λ΄κ° λͺ¨λ₯΄λ λΆλΆμ μ°Ύμλ νμ΄μ§μ μ 체μ μ λΆλ₯Ό νλ²μ μ΄ν΄ λͺ»νκ³ λ€μ μ΄μ μ λΆλΆμ μ°Ύμλ³΄κ³ μ΄λ κ² μκ°μ λ§μ΄ λ€μλλ° μ΄λ° λΆλΆμ μκ°μ΄ μ€μ΄μ 곡λΆνλλ° ν° λμμ΄ λλ€.
π€ λ°λ‘ μ½λ©λ¬Έμ λ₯Ό νμ΄λ³΄κ³ μΆμλ° μ‘°κΈ νλ€λ€. κ° ννΈμ λ§λ μ½λ©λ¬Έμ λ₯Ό μ°Ύλ κ²λ μκ°μ΄ μ’ κ±Έλ¦¬κ³ ν λ¬Έμ λ₯Ό νλ©΄ λ€μ λ¬Έμ λ₯Ό μ°λ¬μμ νΈλ κ² ν¨μ¨μ΄ μ’μ κ² κ°κΈ°μ λ§μ μμ΄ κ°μ§ μλλ€. μλ§ μλ°μ μ λ°μ μΈ λΆλΆμ νλ² κ³΅λΆν λ€μ μμν΄μΌν κ² κ°λ€.