패스잇
백엔드 개발 · 기초

Java의 equals()와 hashCode() 메서드를 왜 함께 오버라이드해야 하나요?

힌트 · HashMap, HashSet 등 해시 기반 컬렉션에서의 동작을 생각해보세요.

equals 계약hashCode 계약동등성 비교해시 테이블컬렉션 프레임워크

모범답안

Java에서 equals()hashCode() 메서드를 함께 오버라이드해야 하는 이유는 주로 해시 기반 컬렉션(HashMap, HashSet 등)에서 객체를 올바르게 사용하기 위해서입니다.

equals() 메서드는 객체의 내용이 같은지 비교하는 역할을 합니다. 반면 hashCode() 메서드는 객체의 해시 코드를 반환합니다.

만약 equals()를 오버라이드했는데 hashCode()를 오버라이드하지 않으면, equals()로 비교했을 때 같은 객체라도 hashCode()는 다른 값을 반환할 수 있습니다. 해시 기반 컬렉션은 객체의 해시 코드를 사용하여 객체를 저장하고 검색하기 때문에, 이 경우 동일한 객체가 컬렉션 내에서 다르게 취급될 수 있습니다.

equals()가 true를 반환하는 두 객체는 반드시 동일한 hashCode() 값을 가져야 한다는 규칙이 있습니다. 이 규칙을 지키지 않으면 해시 기반 컬렉션에서 예상치 못한 동작이 발생할 수 있습니다. 따라서 equals()를 오버라이드할 때는 반드시 hashCode()도 함께 오버라이드하여 객체의 동등성을 일관성 있게 유지해야 합니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 Java / Spring 면접 질문

← Java / Spring 면접 질문 전체 보기