Java

Object클래스의 메서드 - hashCode()

1space 2025. 6. 22. 01:12

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다.



hashCode() 메서드란?

해시코드란?

  • 해시코드(hash code)는 어떤 값을 고정된 길이의 숫자로 변환한 것입니다.
  • 주로 해시 기반 자료구조(예: HashMap, HashSet)에서 사용됨
  • 목적: 빠르게 값을 찾기 위해

Object.hashCode() 기본 기능

  • Object 클래스에 정의된 기본 hashCode()는 객체의 메모리 주소를 기반으로 해시값을 생성합니다.
  • 그래서 다른 객체는 서로 다른 해시코드를 가집니다.

 

예제 코드 설명

public class Ex9_3 {
    public static void main(String[] args) {
        String str1 = new String("abc");
        String str2 = new String("abc");

        System.out.println(str1.equals(str2));          // true
        System.out.println(str1.hashCode());            // 96354
        System.out.println(str2.hashCode());            // 96354
        System.out.println(System.identityHashCode(str1)); // 271349373
        System.out.println(System.identityHashCode(str2)); // 1284693
    }
}

 

 

출력 문장 결과 설명
str1.equals(str2) true 문자열 "abc"는 내용이 같으므로 equals()는 true
str1.hashCode() 96354 String 클래스는 내용을 기준으로 해시코드를 오버라이딩해서 동일한 내용 → 같은 해시코드
str2.hashCode() 96354 마찬가지로 내용이 같으므로 같은 해시코드
System.identityHashCode(str1) 271349373 객체의 실제 주소 기반 해시코드
System.identityHashCode(str2) 1284693 str2는 str1과 내용은 같지만 다른 객체이므로 주소 기반 해시코드는 다름
 

 

핵심 개념 정리

equals() 내용이 같은지 비교하는 메서드 (기본은 주소 비교지만, String은 오버라이딩되어 내용 비교함)
hashCode() 객체의 해시코드. String은 같은 문자열 내용이면 같은 해시코드를 반환
System.identityHashCode() 진짜 객체의 주소 기반 해시코드. 무조건 객체마다 다름
 

 

왜 해시코드가 중요한가?

  • HashMap 같은 자료구조는 객체의 hashCode()와 equals()를 이용해 데이터 저장과 검색을 합니다.
  • 따라서 equals()와 hashCode()는 항상 같이 오버라이딩해야 합니다.
    • equals()가 true면 hashCode()도 같아야 함!

 

요약

  • Object.hashCode()는 주소 기반
  • String.hashCode()는 내용 기반으로 오버라이딩되어 있음
  • System.identityHashCode()는 진짜 주소 기반 해시코드
  • str1과 str2는 내용은 같지만 다른 객체 → equals(): true, hashCode(): 같음, identityHashCode(): 다름

'Java' 카테고리의 다른 글

String클래스  (0) 2025.06.22
Object클래스 메서드 - toString()  (0) 2025.06.22
Object 클래스의 메서드 - equals()  (0) 2025.06.22
Object클래스  (0) 2025.06.22
연결된 예외  (0) 2025.06.21