Item 40. @Override
@Override μ λν μ΄μ μ μΌκ΄λκ² μ¬μ©νλΌ.
μλ°κ° κΈ°λ³ΈμΌλ‘ μ 곡νλ μ λν
μ΄μ
μ€ κ°μ₯ μ€μνκ³ μμ£Ό μ°μ΄λ μ λν
μ΄μ
μ @Override
μ΄λ€.
@Override
λ ν΄λΉ λ©μλκ° μμ ν΄λμ€μ λ©μλλ₯Ό μ¬μ μν κ²μμ νμνλ λ©μλλ₯Ό λμμΌλ‘ νλ μ λν
μ΄μ
μ΄λ€.
μ΄ μ λν μ΄μ μ μ¬μ©νμ§ μκ³ λ©μλλ₯Ό μ¬μ μνλ©΄ μ»΄νμΌλ¬κ° μ€λ₯λ₯Ό λ°μμν€μ§ μλλ°, κ·Έ μλ μλ μ½λμ κ°λ€.
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) { // Objectμ equalsλ₯Ό μ¬μ μνκΈ° μν΄μ λ§€κ°λ³μ νμ
μ Objectλ‘ ν΄μΌν¨
return b.first == first && b.second == second;
}
public int hashCode() {
return 31 * first + second;
}
}
class Main {
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)); // μ λΆ λ€λ₯Έ Bigram κ°μ²΄λ‘ μΈμνμ¬ μ΄ 26 * 10 = 260κ°μ κ°μ²΄κ° μμ±λ¨
}
}
System.out.println(s.size()); // κΈ°λνλ κ° 26, μ€μ κ° 260
}
}
μΈλ» 보면 λ¬Έμ μμ΄ equals
λ©μλλ₯Ό μ¬μ μν κ²μ²λΌ 보μ΄μ§λ§, μ€μ λ‘λ Object
μ equals
λ©μλλ₯Ό μ¬μ μ(overriding)ν κ²μ΄ μλλΌ λ€μ€ μ μ(overloading)ν κ²μ΄λ€.
μ΄λ₯Ό λ°©μ§νκΈ° μν΄μ Object.equals
λ₯Ό μ¬μ μνλ€λ μλλ₯Ό λͺ
νν λ°νκΈ° μν΄ @Override
μ λν
μ΄μ
μ μ¬μ©νλ κ²μ΄ μ’λ€.
class Bigram {
private final char first;
private final char second;
public Bigram(char first, char second) {
this.first = first;
this.second = second;
}
// Error, method does not override or implement a method from a supertype
// @Override
// public boolean equals(Bigram b) {
// return b.first == first && b.second == second;
// }
@Override
public boolean equals(Object o) { // Objectμ equalsλ₯Ό μ¬μ μνκΈ° μν΄μ λ§€κ°λ³μ νμ
μ Objectλ‘ ν΄μΌν¨
if (!(o instanceof Bigram)) {
return false;
}
Bigram b = (Bigram) o;
return b.first == first && b.second == second;
}
@Override
public int hashCode() {
return 31 * first + second;
}
}
λ§μ½ κΈ°μ‘΄μ λ©μλμ @Override
μ λν
μ΄μ
μ μ¬μ©νλ©΄ μ»΄νμΌλ¬κ° μ€λ₯λ₯Ό λ°μμν€κΈ° λλ¬Έμ νλ‘κ·Έλλ¨Έκ° μ€μλ₯Ό 빨리 λ°κ²¬ν μ μλ€.
κ²°λ‘
κΈ°λ³Έμ μΌλ‘ μμ ν΄λμ€μ λ©μλλ₯Ό μ¬μ μνλ €λ λͺ¨λ λ©μλμ @Override
λ₯Ό μ¬μ©νμ.
μμΈλ‘ μμ ν΄λμ€μ μΆμ λ©μλλ₯Ό μ¬μ μν ꡬμ ν΄λμ€λ @Override
λ₯Ό μλ΅ν΄λ λλλ°, μ΄λ μΆμ λ©μλλ₯Ό μ¬μ μνμ§ μμΌλ©΄ μ»΄νμΌλ¬κ° μ€λ₯λ₯Ό λ°μμν€κΈ° λλ¬Έμ΄λ€.
νμ§λ§ λΆμΈλ€κ³ λ¬Έμ κ° λλ κ²μ΄ μλλ μ¬μ μ νλ κ²½μ°μ νμ @Override
λ₯Ό λΆμ΄λ κ²μ΄ μ’λ€.
Last updated
Was this helpful?