공부/소소한 개발
Java Object class, equals, Hash Code
무는빼주세요
2021. 9. 19. 15:34
JAVA의 Object 클래스는 다른 Java 클래스들의 조상 클래스로 사용 된다.
Object 클래스의 메소드는 다음과 같다

그 중 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 또한 오버라이딩이 필요하다.