Java에서 모든 클래스는 기본적으로 Object 클래스를 상속받습니다. 이 클래스에는 여러 유용한 메소드가 포함되어 있으며, 이 중에는 equals()
메소드와 hashCode()
메소드가 있습니다.
equals() 메소드
: 두 객체의 동등성(equality)을 확인하는데 사용됩니다. 기본적으로 equals()
메소드는 객체의 물리적 동등성을 확인합니다, 즉 두 객체 참조가 실제로 같은 객체를 가리키는지 확인합니다. 그러나 이 메소드는 오버라이드(재정의)할 수 있으므로, 두 객체의 논리적 동등성을 확인하는 데 사용할 수 있습니다. 예를 들어, 두 개의 서로 다른 String 객체가 동일한 문자열을 갖고 있으면, String 클래스의 equals()
메소드는 이 두 객체를 동등하다고 판단합니다.
hashCode() 메소드
: 객체의 해시 코드 값을 반환하는데 사용됩니다. 해시 코드는 객체를 식별하는 데 사용되는 정수값입니다. 기본적으로, hashCode()
메소드는 객체의 메모리 주소를 기반으로 값을 계산하지만, 이 메소드 역시 오버라이드할 수 있습니다.
두 메소드의 가장 중요한 차이점은 equals()
메소드는 두 객체가 동등한지 판단하는 반면, hashCode()
메소드는 객체를 고유하게 식별하는 정수값(해시 코드)을 제공하는 것입니다.
또한, Java에서는 equals()
메소드와 hashCode()
메소드 사이에 특별한 관계가 있습니다. 두 객체가 equals()
메소드에 의해 동등하다고 판정되면, 두 객체의 hashCode()
메소드는 반드시 같은 값을 반환해야 합니다. 이 규칙을 지키지 않으면, Java의 해시 기반 컬렉션(예: HashMap, HashSet)이 올바르게 작동하지 않을 수 있습니다.