공부/소소한 개발

Java Object class, equals, Hash Code

무는빼주세요 2021. 9. 19. 15:34

JAVA의 Object 클래스는 다른 Java 클래스들의 조상 클래스로 사용 된다.

Object 클래스의 메소드는 다음과 같다

https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html

그 중 equals와 hashCode에 대해 정리하면 

equals는 두 객체가 논리적으로 동일한지 확인하기 위해 사용된다.

hashCode는 두 객체가 같은 객체인지 확인하기 위해 사용.

 

equals의 기본 정의는 ==로 비교하도록 되어있다.

해당 비교는 물리적인 비교로 각 객체의 주소값을 비교하게 된다.

이를 논리적인 구조로 비교하기 위해선 오버라이딩(@Override)하여 equals를 수정하여야한다.

ex) 클래스의 변수 값으로 String name, int num이 있는 상황

@Override
public boolean equals(Object object)
 if (object instanceof Minjae) {
            Minjae minjae = (Minjae) object;
            return (num == minjae.num) && (name.equals(minjae.name));
        }else{
            return false;
        }
    }

위와 같이 equals를 정의한 후 객체에 동일한 값을 기입하여 생성하면 true를 반환한다.

 

hashCode는 객체의 메모리 주소값을 반환한다.

만약 equals를 위와 같이 오버라이딩한 후 두개의 객체를 비교하였을 때 같은 값이 반환된다면 두 객체의 해쉬코드 또한 같은 값으로 반환되어야 하지만 메모리 주소값은 두개의 객체가 같지 않기 때문에 다른 값이 나오는 상황이 된다.

이를 방지하기 위해서 hashCode 또한 오버라이딩이 필요하다.

 

 

 

 

 

댓글수0