item 40 jihoonKim - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
@Overrideλ λ©μλ μ μΈμλ§ λ¬ μ μμΌλ©°, μ΄ μ λν μ΄μ μ΄ λ¬λ Έλ€λ κ²μ μμ νμ μ λ©μλ€λ₯΄ μ¬μ μνμμ λ»νλ€.
// μμ΄ μνλ²³ 2κ°λ‘ ꡬμ±λ λ¬Έμμ΄μ νννλ ν΄λμ€ - λ²κ·Έ μ‘΄μ¬
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;
}
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));
Sytem.out.println(s.size()); // '260' μΆλ ₯
}
}
- λκ°μ μλ¬Έμ 2κ°λ‘ ꡬμ±λ λ°μ΄κ·Έλ¨ 26κ°λ₯Ό 10λ² λ°λ³΅ν΄ μ§ν©μ μΆκ°ν λ€μ, κ·Έ μ§ν©μ ν¬κΈ°λ₯Ό μΆλ ₯νλ€.
Setμ μ€λ³΅μ νμ©νμ§ μμ 26μ΄ μΆλ ₯λ κ±° κ°μ§λ§, μ€μ λ‘λ 260μ΄ μΆλ ₯λλ€. - equalsλ₯Ό μ¬μ μ(overriding)ν κ² μλλΌ λ€μ€μ μ(overloading)λ₯Ό ν κ²μ΄λ€.
- Objectμ equalsλ₯Ό μ¬μ μνλ €λ©΄ λ§€κ° λ³μ νμ μ Objectλ‘ ν΄μΌλ§ νλ€.
- Objectμ equalsλ == μ°μ°μμ κ°μ΄ κ°μ²΄ μλ³μ±(identity)λ§μ νμΈνλ€.
- κ°μ μλ¬Έμλ₯Ό μμ ν λ°μ΄κ·Έλ¨ 10κ° κ°κ°μ΄ μλ‘ λ€λ₯Έ κ°μ²΄λ‘ μΈμ
// μ»΄νμΌ μλ¬κ° λ°μνμ¬ μλͺ»λ μ½λμμ 미리 νμΈν μ μλ€.
@Override public boolean equals(Bigram b) {
return b.first == first && b.second == second;
}
// μ¬λ°λ₯΄κ² μμ λ μ½λ
@Override public boolean equals(Object o) {
if (!(o instanceof Bigram))
return false;
Bigram b = (Bigram) o;
return b.first == first && b.second == second;
}
μμ ν΄λμ€μ λ©μλλ₯Ό μ¬μ μνλ €λ λͺ¨λ λ©μλμ @Override μ λν
μ΄μ
μ λ¬μ. μ»΄νμΌλ¬κ° μ¬λ¬λΆμ μ€μλ₯Ό μλ €μ€ κ²μ΄λ€.
μμΈλ ν κ°μ§λΏμ΄λ€. ꡬ체 ν΄λμ€μμ μμ ν΄λμ€μ μΆμ λ©μλλ₯Ό μ¬μ μν λλ μ΄ μ λν
μ΄μ
μ λ¬μ§ μμλ λλ(μ΄ λν, μ»΄νμΌλ¬κ° μλ €μ€λ€), λ¨λ€κ³ ν΄λ‘μΈ κ²λ μλ€.