Hello, Coding

[ JAVA ] 두 객체가 동일한 hashCode()를 가지면 Equals()가 참인가? 본문

개발 질문 & 답변/자바 질의응답

[ JAVA ] 두 객체가 동일한 hashCode()를 가지면 Equals()가 참인가?

DURAM 2023. 5. 27. 14:22

이것에 대해 먼저 다루기 전에 Equals()가 무엇인지 알 필요가 있다. Equals()는 자바에서 비교할 때 쓰이는

메소드인데 2개의 객체가 동일한지 검사할 때 쓰인다.

 

그리고 다음으로는 hashCode가 무엇인지 알아야 한다.

자바에서 hashCode는 자료구조를 사용할 때 자료가 저장되는 위치를 결정하기 위해 쓰이게 된다.

 

그러면 두 객체가 동일한 hashCode를 가지면 Equals()가 참으로 나오게 될까?

결론부터 말하자면 그렇지는 않다.

 

만약 문자열 "Hello World"의 Hash code가 "12930481" 이라 했을 때

 

그렇다고 해서 "12930481"이라는 해시 코드를 문자열 "Hello World"만

가질 수 있는건 아니기 때문이다. 다른 문자열도 언제든지 동일한 해쉬코드를 받을 수 있다.

 

그런 이유로 해시 자료구조에서는 hashcode로 비교를 한 후, 추가적으로 equals도 비교를 하고 같지 않기 때문에 해시가 충돌했다고 판단해서 새로운 인덱스에 데이터를 생성하게 된다. 

 

그래서 hashCode() 와 Equals()는 같이 재정의 해야 한다.

우리는 이것을 자바에서는 Override (오버라이딩) 한다고 말한다.

 

HashCode()가 다른 것을 볼 수 있다.