μμ΄ν
40 @Override μ λν
μ΄μ
μ μΌκ΄λκ² μ¬μ©νλΌ
- μλ°κ° κΈ°λ³ΈμΌλ‘ μ 곡νλ μ λν
μ΄μ
μ€ λ³΄ν΅μ νλ‘κ·Έλλ¨Έμκ² κ°μ₯ μ€μν κ²μ @OverrideμΌ κ²μ΄λ€.
@Overrideλ λ©μλ μ μΈμλ§ λ¬ μ μμΌλ©°, μ΄ μ λν
μ΄μ
μ΄ λ¬λ Έλ€λ κ²μ μμ νμ
μ λ©μλλ₯Ό μ¬μ μνμμ λ»νλ€.
μ΄ μ λν
μ΄μ
μ μΌκ΄λκ² μ¬μ©νλ©΄ μ¬λ¬ κ°μ§ μ
λͺ
λμ λ²κ·Έλ€μ μλ°©ν΄μ€λ€.
Bigram μ΄ μ μλμν κΉ?
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));
System.out.println(s.size());
}
}
- main λ©μλλ₯Ό 보면 λκ°μ μλ¬Έμ 2κ°λ‘ ꡬμ±λ λ°μ΄κ·Έλ¨ 26κ°λ₯Ό 10λ² λ°λ³΅ν΄ μ§ν©μ μΆκ°ν λ€μ, κ·Έ μ§ν©μ ν¬κΈ°λ₯Ό μΆλ ₯νλ€.
Setμ μ€λ³΅μ νμ©νμ§ μμΌλ 26μ΄ μΆλ ₯λ κ±° κ°μ§λ§, μ€μ λ‘λ 260μ΄ μΆλ ₯λλ€. 무μΈκ° μλͺ»λλ€!
- νμ€ν Bigram μμ±μλ equals λ©μλλ₯Ό μ¬μ μνλ € ν κ²μΌλ‘ 보μ΄κ³ hashCodeλ ν¨κ» μ¬μ μν΄μΌ νλ€λ μ¬μ€μ μμ§ μμλ€.
- κ·Έλ°λ° μνκΉκ²λ equalsλ₯Ό βμ¬μ μ(overriding)βν κ² μλλΌ βλ€μ€μ μ (overloading)βν΄λ²λ Έλ€.
- Objectμ equalsλ₯Ό μ¬μ μνλ €λ©΄ λ§€κ°λ³μ νμ
μ Objectλ‘ ν΄μΌλ§ νλλ°, κ·Έλ κ² νμ§ μμ κ²μ΄λ€.
- κ·Έλμ Objectμμ μμν equalsμλ λ³κ°μΈ equalsλ₯Ό μλ‘ μ μν κΌ΄μ΄ λμλ€.
Objectμ equals λ == μ°μ°μμ λκ°μ΄ κ°μ²΄ μλ³μ±(identity)λ§μ νμΈνλ€.
- λ°λΌμ κ°μ μλ¬Έμλ₯Ό μμ ν λ°μ΄κ·Έλ¨ 10κ° κ°κ°μ΄ μλ‘ λ€λ₯Έ κ°μ²΄λ‘ μΈμλκ³ , κ²°κ΅ 260μ μΆλ ₯ν κ²μ΄λ€.
@Override public boolean equals(Bigram b) {
return b.first == first && b.second == second;
}
μμ ν΄λμ€μ λ©μλλ₯Ό μ¬μ μνλ €λ λͺ¨λ λ©μλμ @Override μ λν
μ΄μ
μ λ¬μ.
- μμΈλ ν κ°μ§λΏμ΄λ€. ꡬ체 ν΄λμ€μμ μμ ν΄λμ€μ μΆμ λ©μλλ₯Ό μ¬μ μν λλ κ΅³μ΄ @Overrideλ₯Ό λ¬μ§ μμλ λλ€.
ꡬ체 ν΄λμ€μΈλ° μμ§ κ΅¬ννμ§ μμ μΆμ λ©μλκ° λ¨μ μλ€λ©΄ μ»΄νμΌλ¬κ° κ·Έ μ¬μ€μ λ°λ‘ μλ €μ£ΌκΈ° λλ¬Έμ΄λ€.
λ¬Όλ‘ μ¬μ μ λ©μλ λͺ¨λμ @Overrideλ₯Ό μΌκ΄λ‘ λΆμ¬λλ κ² μ’μ 보μΈλ€λ©΄ κ·Έλλ μκ΄μλ€.