Item 10. equals
equalsλ μΌλ° κ·μ½μ μ§μΌ μ¬μ μνλΌ
equalsλ μ¬μ μνκΈ° μ¬μ 보μ΄μ§λ§, μλͺ» μ¬μ μνλ©΄ νλ‘κ·Έλ¨μ΄ μ€λμν μ μλ€. λλ¬Έμ νμν κ²½μ°κ° μλλ©΄ μ¬μ μνμ§ μλ κ²μ΄ μ’κ³ , λ€μμ μν©μ΄λ©΄ μ¬μ μν νμκ° μλ€.
κ° μΈμ€ν΄μ€κ° λ³Έμ§μ μΌλ‘ κ³ μ νλ€.
μΈμ€ν΄μ€μ 'λ Όλ¦¬μ λμΉμ±(logical equality)'μ κ²μ¬ν μΌμ΄ μλ€.
μμ ν΄λμ€μμ μ¬μ μν equalsκ° νμ ν΄λμ€μ equalsμμλ μλ§κ² λμνλ€.
ν΄λμ€κ° privateμ΄κ±°λ package-privateμ΄κ³ , equals λ©μλλ₯Ό νΈμΆν μΌμ΄ μλ€.
μ μν©μ΄ μλλΌ λ Όλ¦¬μ λμΉμ±μ κ²μ¬ν΄μΌ νλ€λ©΄, λ€μμ κ·μ½μ λ°λΌ μ¬μ μν΄μΌ νλ€.
equals μ¬μ μ κ·μ½
λ°μ¬μ±(reflexivity): nullμ΄ μλ λͺ¨λ μ°Έμ‘° κ° xμ λν΄, x.equals(x)λ trueλ€.
λμΉμ±(symmetry): nullμ΄ μλ λͺ¨λ μ°Έμ‘° κ° x, yμ λν΄, x.equals(y)κ° trueλ©΄ y.equals(x)λ trueλ€.
μΆμ΄μ±(transitivity): nullμ΄ μλ λͺ¨λ μ°Έμ‘° κ° x, y, zμ λν΄, x.equals(y)κ° trueμ΄κ³ y.equals(z)λ trueλ©΄ x.equals(z)λ trueλ€.
μΌκ΄μ±(consistency): nullμ΄ μλ λͺ¨λ μ°Έμ‘° κ° x, yμ λν΄, x.equals(y)λ₯Ό λ°λ³΅ν΄μ νΈμΆνλ©΄ νμ trueλ₯Ό λ°ννκ±°λ νμ falseλ₯Ό λ°ννλ€.
null-μλ: nullμ΄ μλ λͺ¨λ μ°Έμ‘° κ° xμ λν΄, x.equals(null)μ falseλ€.
μΌν보면 λΉμ°ν κ·μ½λ€μ΄μ§λ§, μ€μλ‘ μ΄κΈΈ μ μλ κ·μ½λ€μ΄λ€. μμ κ·μ½λ€μ μ΄κΈ΄ μμλ€μ μλμ κ°λ€.
λ°μ¬μ±
μ μμ μΈ μλκ° μλ€λ©΄ μ΄κΈΈ μΌμ΄ μλ€.
λμΉμ±
μΆμ΄μ±
μμ ColorPoint ν΄λμ€ λ΄μ equals ꡬν λ΄μ©μ λ°λΌ κ·μ½ μλ°° μ¬λΆκ° κ²°μ λλ€. μ°μ μλμ κ°μ΄ ꡬννκ² λλ©΄ λμΉμ±μ΄ μλ°°λλ€.
μ΄λ₯Ό μμ νμ¬ Point ν΄λμ€μ λν λΉκ΅λ₯Ό μΆκ°νλ©΄ λμΉμ±μ μ§μΌμ§μ§λ§, μΆμ΄μ±μ΄ μλ°°λλ€.
λ§μ½ instanceof λμ getClassλ₯Ό μ¬μ©νλ©΄ μΆμ΄μ±μ μ§μΌμ§μ§λ§, λμΉμ±μ΄ μλ°°λλ€. λν Pointμ νμν΄λμ€μΈ ColorPointκ° λμ΄μ Pointλ‘μ¨ μ¬μ©λ μ μκ² λλ€.(리μ€μ½ν μΉν μμΉ μλ°°)
μ΄μ ν΄λμ€λ₯Ό νμ₯νλ κ²½μ°μλ equals κ·μ½μ μ§ν€λ κ²μ λΆκ°λ₯νλ€κ³ λ³Ό μ μμ§λ§, μ°ννλ λ°©λ²μ΄ μλ€.
μ λ°©λ²μΌλ‘ equals κ·μ½μ μ§ν¬ μ μμ§λ§, ColorPointλ₯Ό Pointμλ λμ΄μ μμ κ΄κ³λ μλκ² λλ€.
μΌκ΄μ±
equalsμ νμλ° μ λ’°ν μ μλ μμμ΄ λΌμ΄λ€μ§ μλλ‘ ν΄μΌ νλ€.
null-μλ
instanceof μ°μ°μλ‘ μ λ ₯ λ§€κ°λ³μκ° μ¬λ°λ₯Έ νμ μΈμ§ νμΈνλ©΄ λͺ μμ μΌλ‘ null κ²μ¬λ₯Ό ν νμκ° μλ€. μ λ ₯μ΄ nullμ΄λ©΄ νμ νμΈ λ¨κ³μμ falseλ₯Ό λ°ννλ―λ‘ null κ²μ¬λ₯Ό λͺ μμ μΌλ‘ νμ§ μμλ λλ€.
equals λ©μλ ꡬνμ μ£Όμμ¬ν
== μ°μ°μλ₯Ό μ¬μ©ν΄ μ λ ₯μ΄ μκΈ° μμ μ μ°Έμ‘°μΈμ§ νμΈ
μκΈ° μμ μ΄λ©΄ trueλ₯Ό λ°ν
λ¨μν μ±λ₯ μ΅μ νμ©μΌλ‘ λΉκ΅ μμ μ΄ λ³΅μ‘ν μν©μΌ λ μ’μ
instanceof μ°μ°μλ‘ μ λ ₯μ΄ μ¬λ°λ₯Έ νμ μΈμ§ νμΈ
κ°λ ν΄λΉ ν΄λμ€κ° ꡬνν νΉμ μΈν°νμ΄μ€λ₯Ό λΉκ΅ν μλ μμ
μ΄λ° μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€λΌλ©΄ equalsμμ (ν΄λμ€κ° μλ) ν΄λΉ μΈν°νμ΄μ€λ₯Ό μ¬μ©ν΄μΌν¨
μ λ ₯μ μ¬λ°λ₯Έ νμ μΌλ‘ νλ³ν
2λ²μμ instanceof μ°μ°μλ‘ μ λ ₯μ΄ μ¬λ°λ₯Έ νμ μΈμ§ κ²μ¬ νκΈ° λλ¬Έμ μ΄ λ¨κ³μμ μ€λ₯κ° λ°μνμ§ μμ
μ λ ₯ κ°μ²΄μ μκΈ° μμ μ λμλλ 'ν΅μ¬' νλλ€μ΄ λͺ¨λ μΌμΉνλμ§ νλμ© κ²μ¬
λͺ¨λ μΌμΉν΄μΌ trueλ₯Ό λ°ννλλ‘ κ΅¬ν
κΈ°λ³Έ νμ μ ==λ‘ λΉκ΅νκ³ μ°Έμ‘°νμ μ equalsλ‘ λΉκ΅
float, double νλλ μ μ λ©μλ Float.compare(float, float)μ Double.compare(double, double)λ‘ λΉκ΅
Float.equals(float)λ Double.equals(double)λ μ€ν λ°μ±μ μλ°ν΄ μ±λ₯μ μ’μ§ μμ
λ°°μ΄ νλλ μμ κ°κ°μ μ§μΉ¨λλ‘ λΉκ΅
λͺ¨λκ° ν΅μ¬ νλλΌλ©΄ Arrays.equals()λ₯Ό μ¬μ©
NullPointException λ°μμ μλ°©νκΈ° μν΄ Object.equals(object, object)λ‘ λΉκ΅
νλμ λΉκ΅ μμλ₯Ό μμ λΉμ©μ΄ λλ νλλΆν° ν° λΉμ©μ΄ λλ νλ μμΌλ‘ λΉκ΅
eqaulsλ₯Ό μ¬μ μν λ hashCodeλ λ°λμ μ¬μ μ
Last updated
Was this helpful?