[Java] hashCode()μ equals()λ?
Javaλ₯Ό 곡λΆνλ€λ³΄λ©΄, νλ‘κ·Έλλ° μ 'hashCode()' μ 'equals()' λ©μλμ λν΄ λ§μ΄ μ νκ² λλ€.
μ΄ λ©μλλ€μ κ°μ²΄μ λλ±μ± λΉκ΅μ ν΄μ λ§΅(HashMap) λ±μ μλ£ κ΅¬μ‘°μμ ν¨μ¨μ μΈ κ²μμ μν΄ μ¬μ©λλ μ€μν λ©μλμ΄λ€.
μ΄λ² κΈμμλ hashCode()μ equals() λ©μλμ λν΄ μμΈνκ² μ 리ν΄λ³΄λ €κ³ νλ€.
hashCode() Method
hashCode() λ©μλλ κ°μ²΄μ ν΄μμ½λλ₯Ό λ°ννλ λ©μλμ΄λ€.
λ¨Όμ , ν΄μμ½λλ λ°μ΄ν°λ₯Ό λΉ λ₯΄κ² μ μ₯νκ³ κ²μνκΈ° μν΄ μ¬μ©λλ μμμ κΈΈμ΄μ κ³ μ λ ν¬κΈ°μ κ°μ΄λ€.
μ΄λ hashCode() λ©μλλ₯Ό ν΅ν΄ κ°μ²΄μ ν΄μμ½λλ₯Ό μ»μ μ μλ€.
μΌλ°μ μΌλ‘ hashCode() λ©μλλ κ°μ²΄μ νλλ₯Ό κΈ°λ°μΌλ‘ ν΄μ μ½λλ₯Ό μμ±νλ©°, μ£Όμ λͺ©μ μ λΉ λ₯Έ κ²μμ μν΄ κ°μ²΄λ₯Ό ν΄μλ‘ λ§€ννλ κ², μ¦ μ΄λ₯Ό ν΅ν΄ κ°μ²΄μ λλ±μ± λΉκ΅μ ν΄μκΈ°λ° μλ£ κ΅¬μ‘°μμμ ν¨μ¨μ μΈ κ²μμ΄ κ°λ₯νλλ‘ νλ€.
[νΉμ§]
- λμΌν κ°μ²΄μ λν΄ μ¬λ¬ λ² νΈμΆλλλΌλ νμ κ°μ μ μλ₯Ό λ°νν΄μΌ νλ€.
- μλ‘ λ€λ₯Έ κ°μ²΄λΌλ©΄ ν΄μ μΆ©λμ΄ λ°μνμ§ μλλ‘ λ€λ₯Έ ν΄μ μ½λλ₯Ό λ°νν΄μΌ νλ€.
equals() Method
equals() λ©μλλ λ κ°μ²΄κ° λ Όλ¦¬μ μΌλ‘ κ°μμ§λ₯Ό νμΈνλ λ©μλμ΄λ€.
μ¦, κ°μ²΄μ λλ±μ± λΉκ΅μ μμ£Ό μ¬μ©λλ λ©μλμ΄λ€.
[νΉμ§]
- λ κ°μ²΄κ° κ°λ€λ©΄ (λ΄μ©μ΄ λμΌνκ±°λ, κ°μ κ°μ²΄λ₯Ό μ°Έμ‘°νλ κ²½μ°) : equals() λ©μλλ 'true'λ₯Ό λ°ννλ€.
- equals() λ©μλλ₯Ό μ€λ²λΌμ΄λ© ν λλ λ°λμ 'hashCode()' λ©μλλ ν¨κ» μ€λ²λΌμ΄λ© ν΄μΌ νλ€.
- λμΉμ±, μΆμ΄μ±, μΌκ΄μ±, null μ¬λΆ λ± 'equals()'λ©μλμ μΌλ°μ μΈ κ·μ½μ λ°λΌμΌ νλ€.
**μ€λ²λΌμ΄λ© μ μ**
μ€λ²λΌμ΄λ©(Overriding)μ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μμ μμκ΄κ³μ μλ ν΄λμ€λ€ κ°μ λ°μνλ κ°λ μ΄λ€.
λ©μλ μ€λ²λΌμ΄λ©μ νμν΄λμ€ κ° μμν΄λμ€λ‘λΆν° μμ‘λ°μ λ©μλλ₯Ό μ¬μ μνλ κ²μ μλ―Ένλ€.
hashCode() μ equals() μ¬μ©
import java.util.Objects;
public class Book {
private String title;
private String author;
private int year;
public Book(String title, String author, int year) {
this.title = title;
this.author = author;
this.year = year;
}
//hashCode()λ©μλ ꡬν
@Override
public int hashCode() {
int result = 17;
result = 31 * result + Objects.hash(title, author, year);
return result;
}
//equals() λ©μλ ꡬν
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || getClass() != obj.getClass())
return false;
Book book = (Book) obj;
return year == book.year &&
Objects.equals(title, book.title) &&
Objects.equals(author, book.author);
}
//Getters and Setters
}
λ°λΌμ μ λͺ©, μ μ, μΆνλ λ νλλ₯Ό κΈ°λ°μΌλ‘ hashCode() λ©μλλ₯Ό ν΅ν΄ ν΄μμ½λλ₯Ό μμ±νκ³ , equals() λ©μλλ₯Ό ν΅ν΄ λ κ°μ²΄κ° λμΌνμ§ μ¬λΆλ₯Ό λΉκ΅ν μ μλ€.
- hashCode() λ©μλλ₯Ό ꡬνν λλ κ°μ²΄μ νλλ₯Ό μ¬μ©νμ¬ ν΄μ μ½λλ₯Ό μμ±νλ κ²μ΄ μΌλ°μ μ΄λ€.
μ΄λ, ν΄μ μΆ©λμ΄ μΌμ΄λ μ μκΈ° λλ¬Έμ μ΄ μΆ©λμ μ΅μννκΈ° μν΄ μ μ€κ³λ ν΄μ ν¨μλ₯Ό μ¬μ©ν΄μΌ νλ€. - equals() λ©μλλ₯Ό ꡬνν λλ λ κ°μ²΄κ° λλ±νμ§λ₯Ό νλ¨νλ λ‘μ§μ μμ±ν΄μΌ νλ€.
λ³΄ν΅ κ°μ²΄μ κ° νλλ₯Ό λΉκ΅νμ¬ λμΌνμ§ μ¬λΆλ₯Ό κ²°μ νκ² λλ€.
μ 리
μ¦, hashCode() μ equals() λ©μλλ₯Ό μ λλ‘ κ΅¬ννκ³ μ΄ν΄νλ κ²μ Javaμ ν΅μ¬ κ°λ μΈ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ μ΄ν΄νλλ° μμ΄ ν΅μ¬μ μΈ λΆλΆμ΄λ€. κ°μ²΄μ λμΌμ±κ³Ό λλ±μ±μ μ¬λ°λ₯΄κ² λ€λ£¨κΈ° μν΄ μ΄ λ λ©μλμ λν μ΄ν΄λ₯Ό νμ€ν ν νμκ° μλ€.