ABOUT ME

beck33333@naver.com

Today
Yesterday
Total
  • 객체의 해시코드(hashCode())란
    JAVA/Java 2020. 5. 19. 23:05

    객체 해시 코드란 객체를 식별할 하나의 정수 값을 말한다.

     

     

    Object는 클래스의 최상위 타입이고 Object의 hashCode() 메서드는 객체의 메모리 번지를 이용해서 해시 코드를

     

    만들어 리턴하기 때문에 객체마다 다른 값을 가지게 된다.

     

     

    논리적 동등 비교 시 이 hashCode()를 오버 라이딩할 필요가 있는데, HashSet, HashMap, Hashtable은 다음과

     

    같은 방법으로 두 객체가 동등한 지 비교한다.

     

     

    ( 논리적으로 동등하다는 것은 같은 객체이건 다른 객체이건 상관없이 객체가 저장하고 있는 데이터가 동일함을

     

    뜻한다. )

     

     

    위에 예제를 보면 Key 클래스는 equals() 메서드를 재정의해서 number 필드 값이 같으면 true를 리턴하도록 하였다.

     

    이 경우 HashMap의 식별키로 Key 객체를 사용 시 저장된 값을 찾아오지 못한다. 이는 hashCode() 메서드를 재정의 하지

     

    않았고 Object의 hashCode() 메서드는 객체의 메모리 번지를 이용해서 해시 코드를 만들게 되니 다른 값으로 인식되기

     

    때문이다.

     

     

    다음의 결과는 null이 나오게 되는데 put에 담았던 객체get에서 불러온 객체는 다른 메모리 번지에 있는

     

    다른 객체이기 때문이다.

     

     

    따라서 다음과 같이 number 필드 값을 return 하도록 해주면 이들은 서로 다른 객체이지만 HashMap은 hasCode()의 리

     

    턴 값이 같고 equals의 리턴 값이 true가 나오기 때문에 동등 객체로 평가하게 된다.

     

     

     

     

    결론적으로 말해 객체의 동등 비교를 위해서는 Object의 equals() 메서드만 재정의 하지 말고 hashCode() 메서드도 재정

     

    의해서 논리적 동등 객체일 경우 동일한 해시 코드가 리턴되도록 해보자.

     

     

    'JAVA > Java' 카테고리의 다른 글

Designed by Tistory.