Java equals() hashCode()

Timo·2022년 7월 25일
0

equals()

java.lang.Object 클래스에 equals() 메서드는 이렇게 정의되어 있다.

public boolean equals(Object obj) {
        return (this == obj);
    }

기본적으로 equals() 메서드는 객체 인스턴스의 메모리 주소 값을 비교한다.
따라서 인스턴스 변수를 통해 논리적으로 동일하다고 판단하기 위해서는 equals() 메서드를 재정의해야 한다.

Hash 자료구조에 대해서

해시코드는 해시테이블이라는 자료구조에서 해당 객체를 찾기 위한 인덱스 값이다.
hashCode() 메서드를 이해하기 위해서는 hash 자료구조에 대한 이해가 필요하다.

Java hashCode()

자바의 hashCode() 메서드는 객체의 해시코드(hash code)를 반환하는 메서드이다.
해시코드란 객체를 유일하게 식별하는 정수 값이며, 객체마다 다른 값을 같기 때문에 '객체 지문'이라고도 표현한다.

java.lang.Object 클래스의 hashCode()는 객체의 메모리 주소를 int로 변환하여 반환한다.

public native int hashCode();

native 키워드가 있는 이유는 네이티브 메서드라는 의미이며 네이티브 메서드는 OS의 메서드를 말한다.
즉, 네이티브 메서드는 자바 언어로 구현할 필요 없이 OS의 메서드를 호출한다.

System.identityHashCode(Object obj)

위 메서드는 Object.hashCode() 메서드와 동일하며 주로 hashCode() 재정의하기 이전의 해시코드 값을 확인하기 위해 사용한다.

equals() 메서드를 오버라이딩하면 hashCode() 메서드도 오버라이딩 해야 하는 이유

두 메서드의 기본 형태는 모두 메모리 주소를 기반으로 구현되어 있다.
equals 메서드를 재정의해서 메모리 주소를 기준으로 하는 것이 아니라 인스턴스 변수 값을 기준으로 동등함을 정의한다면 hashCode() 역시 해당 인스턴스 변수를 기준으로 재정의해야 한다.

equals() 결과가 true인 두 객체의 해시코드는 같아야 한다.

[참고 링크]
개발자라면 꼭 알아야할 Hash Table 의 모든 것! https://youtu.be/HraOg7W3VAM
해시 Hash 알고리즘 설명 5분만에 이해하기 https://youtu.be/zFL29ydL9D8
[자료구조 알고리즘] 해쉬테이블(Hash Table)에 대해 알아보고 구현하기 https://youtu.be/Vi0hauJemxA
Hash Table은 프로그래머의 기본기
https://youtu.be/S7vni1hdsZE
[자바의 정석 - 기초편] ch9-4~6 hashCode(), toString() https://youtu.be/GfYg3imRZsc
[java] hashcode()와 equals() 메서드는 언제 사용하고 왜 사용할까?
https://jisooo.tistory.com/entry/java-hashcode%EC%99%80-equals-%EB%A9%94%EC%84%9C%EB%93%9C%EB%8A%94-%EC%96%B8%EC%A0%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B3%A0-%EC%99%9C-%EC%82%AC%EC%9A%A9%ED%95%A0%EA%B9%8C
https://www.baeldung.com/java-hashcode

profile
나는 매일 성장하는 사람

0개의 댓글