백엔드 개발 · 기초
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 면접 질문
- Spring의 IoC(Inversion of Control)와 DI(Dependency Injection)의 개념과 장점에 대해 설명해주세요.
- @Component, @Service, @Repository, @Controller의 차이점은 무엇인가요?
- Java의 Optional 클래스는 왜 만들어졌고, 어떻게 사용하나요?
- Java의 Checked Exception과 Unchecked Exception의 차이점과 사용 지침에 대해 설명해주세요.
- Spring의 프로파일(Profile) 기능은 무엇이며, 어떻게 활용하나요?
- Java의 String, StringBuilder, StringBuffer의 차이점은 무엇인가요?