@Override μ λν μ΄μ μ λ©μλ μ μΈμλ§ λ¬ μ μμΌλ©°, μ΄ μ λν μ΄μ μ΄ λ¬λ Έλ€λ κ²μ μμ νμ μ λ©μλλ₯Ό μ¬μ μνμμ λ»νλ€.
@Override μ λν μ΄μ μ μΌκ΄λκ² μ¬μ©νλ©΄ μ¬λ¬ κ°μ§ μ λͺ λμ λ²κ·Έλ€μ μλ°©ν΄ μ€λ€.
μ΄λ² κΈμ ν΅ν΄ @Override μ λν μ΄μ μ μ¬μ©νμ§ μμμ λμ λ¬Έμ μ κ³Ό @Override μ λν μ΄μ μ μ¬μ©νμ λμ μ₯μ λ° μ¬μ©μ λν΄μ μμ보λλ‘ νμ.
π 1. @Override μ λν μ΄μ μ μ¬μ©νμ§ μμμ λμ λ¬Έμ μ
public class Bigram {
private final char first;
private final char second;
public Bigram(char first, char second) {
this.first = first;
this.second = second;
}
public boolean equals(Bigram b) {
return b.first == first && b.second == second;
}
public int hashCode() {
return 31 * first + second;
}
}
Bigram ν΄λμ€λ μμ΄ μνλ²³ 2κ°(first, second)λ‘ κ΅¬μ±λ λ¬Έμμ΄μ νννλ€.
public static void main(String[] args) {
Set<Bigram> s = new HashSet<>();
for(int i = 0; i < 10; i++)
for(char ch = 'a'; ch <= 'z'; ch++)
s.add(new Bigram(ch, ch));
System.out.println(s.size());
}
μμ μ½λμμ Setμ μ€λ³΅μ νμ©νμ§ μμΌλ―λ‘ 'a'λΆν° 'z'κΉμ§μ μνλ²³ κ°μμΈ 26μ΄ μΆλ ₯λ κ±°λΌκ³ μκ°ν μ μλ€.
νμ§λ§, 260μ΄ μΆλ ₯λλ€.
equalsμ hashCode λ©μλκ° μ μλλ° μ κ·Έλ΄κΉ?
κ·Έ μ΄μ λ equalsλ₯Ό 'μ¬μ μ(Overriding)'ν κ² μλλΌ 'λ€μ€μ μ(Overloading)' νκΈ° λλ¬Έμ΄λ€.
Objectμ equalsλ₯Ό μ¬μ μνλ €λ©΄ 맀κ°λ³μ νμ μ Objectλ‘ ν΄μΌλ§ νλ€. κ·Έλμ Bigramμμλ Objectμμ μμν equalsλ₯Ό μ¬μ μν κ² μλλΌ λ³κ°μ equalsλ₯Ό μ¬μ μν κ²μ΄λ€.
κ·Έλμ μλμ κ°μ΄ @Overrideλ₯Ό λΆμ¬μ μ»΄νμΌλ¬μκ² μ¬μ μ νλ€λ μλλ₯Ό λͺ μν΄μΌ νλ€.
@Override
public boolean equals(Bigram b) {
return b.first == first && b.second == second;
}
λ¬Όλ‘ μ΄λ κ² νλ©΄ λ€μκ³Ό κ°μ΄ μ»΄νμΌ μ€λ₯κ° λλ€.
java: method does not override or implement a method from a supertype
κ·Έλμ μ΅μ’ μ μΌλ‘ μλμ κ°μ΄ equalsλ₯Ό μ¬μ μν΄μΌ νλ€.
@Override
public boolean equals(Object o) {
if(!(o instanceof Bigram))
return false;
Bigram b = (Bigram) o;
return b.first == first && b.second == second;
}
κ·Έλ¬λ©΄ μ°λ¦¬κ° μμΈ‘ν 'a'λΆν° 'z'κΉμ§μ μνλ²³ κ°μμΈ 26μ΄ μΆλ ₯λλ€.
π 2. @Override μ λν μ΄μ μ μ¬μ©νμ λμ μ₯μ λ° μ¬μ©
μμ μμμμλ νμΈν μ μλ―μ΄, μ¬μ μν λͺ¨λ λ©μλμ @Override μ λν μ΄μ μ λ€λ κ²μ΄ μ’λ€.
κ·Έλ¬λ©΄ μ°λ¦¬κ° μ€μνμ λ μ»΄νμΌλ¬κ° λ°λ‘ μλ €μ€ μ μκΈ° λλ¬Έμ΄λ€.
μμΈκ° νλ μλ€λ©΄, ꡬ체 ν΄λμ€μμ μμ ν΄λμ€μ μΆμ λ©μλλ₯Ό μ¬μ μν λλ κ΅³μ΄ @Overrideλ₯Ό λ¬μ§ μμλ λλ€. ꡬ체 ν΄λμ€μΈλ° μμ§ κ΅¬ννμ§ μμ μΆμ λ©μλκ° λ¨μ μλ€λ©΄ μ»΄νμΌλ¬κ° λ°λ‘ μλ €μ£ΌκΈ° λλ¬Έμ΄λ€.
@Overrideλ ν΄λμ€λΏλ§ μλλΌ μΈν°νμ΄μ€μ λ©μλλ₯Ό μ¬μ μν λλ μ¬μ©ν μ μλ€.
λν΄νΈ λ©μλλ₯Ό μ§μνκΈ° μμνλ©΄μ, μΈν°νμ΄μ€ λ©μλλ₯Ό ꡬνν λ©μλμλ @Overrideλ₯Ό λ€λ μ΅κ΄μ λ€μ΄λ©΄ μκ·Έλμ²κ° μ¬λ°λ₯Έμ§ μ¬μ°¨ νμΈν μ μλ€.
ꡬννλ €λ μΈν°νμ΄μ€μ λν΄νΈ λ©μλκ° μμμ μλ€λ©΄ μ΄λ₯Ό ꡬνν λ©μλμμλ @Overrideλ₯Ό μλ΅ν΄ μ½λλ₯Ό μ‘°κΈ λ κΉλν μ μ§ν΄λ μ’λ€.
νμ§λ§, μΆμ ν΄λμ€λ μΈν°νμ΄μ€μμλ μμ ν΄λμ€λ μμ μΈν°νμ΄μ€μ λ©μλλ₯Ό μ¬μ μνλ λͺ¨λ λ©μλμ @Overrideλ₯Ό λ€λ κ²μ΄ μ’λ€. μμ ν΄λμ€κ° ꡬ체 ν΄λμ€λ μΆμ ν΄λμ€λ λ§μ°¬κ°μ§λ€.
μ컨λ Set μΈν°νμ΄μ€λ Collection μΈν°νμ΄μ€λ₯Ό νμ₯νμ§λ§ μλ‘ μΆκ°ν λ©μλλ μλ€. κ·Έλμ λͺ¨λ λ©μλ μ μΈμ @Overrideλ₯Ό λ¬μ μ€μλ‘ μΆκ°ν λ©μλκ° μμμ 보μ₯νλ€.
ν΄λΉ κΈμ Joshua Block λμ 'Effective Java 3/E'λ₯Ό μ°Έκ³ νμμ΅λλ€.