키보드워리어

[java]equals 메서드와 hashcode 메서드의 관계 본문

JAVA/JAVA 꿀팁모음

[java]equals 메서드와 hashcode 메서드의 관계

꽉 쥔 주먹속에 안경닦이 2023. 4. 10. 08:27
728x90

안녕하세요 블로그 방문자 여러분들 모두 환영합니다.

오늘은 지난 포스팅에 이은 내용입니다.

아직 못 보셨다면 여기를 클릭해 주세요.

2023.04.07 - [JAVA입문/JAVA 꿀팁모음] - [자바]🍯꿀팁 - equals 메서드 활용

[자바]🍯꿀팁 - equals 메서드 활용

안녕하세요 【키보드 워리어】 ⌨🗡🧑 블로그 방문자 여러분, 안경닦이입니다. Equals Java에서 객체를 비교하는 방법은 두 가지가 있습니다. 첫 번째는 == 연산자를 사용하는 것이고, 두 번째는 e

keyboardwarrior.tistory.com

Generate hashCode() and equals()...
Generate hashCode() and equals()...

equlas 메서드와 hashcode 메서드는 왜 붙어있을까요?

Java에서 객체들을 비교할 때 equals 메서드를 사용합니다.

이때 equals 메서드는 객체들이 동일한지 아닌지를 판단하는 역할을 합니다. 그런데 우리가 자주 사용하는 HashMap, HashSet 등의 자료구조들은 객체를 저장할 때 hashCode를 사용합니다.

hashCode는 객체의 고유한 해시값을 반환하는 메서드로, HashMap이나 HashSet 등에서 객체를 저장하거나 조회할 때 사용됩니다. 그런데, hashCode를 구현할 때에는 hashCode 메서드에서 반환하는 값이 동일한 객체들의 hashCode 값이 동일하도록 구현해야 합니다.

이것이 hashCode가 일하는 방식입니다.

HashCode

hashing function은 hashcode를 의미하는데 hash코드를 기준으로 다양한 bucket을 생성합니다.
hashMap의 효율은 hashcode를 어떻게 구현하냐에 따라 달렸습니다. 특정한 bucket에 1000개, 0개가 쏠리지 않게 bucket에 비슷하게 균등되도록 해야 합니다.

hashCode메서드
hashCode메서드

두 번째로, hashCode의 값은 ID가 바뀌지 않는 이상 변함이 없어야 합니다. 이 두 가지 조건 때문에 equals 메서드와 hashCode 메서드는 함께 구현되어야 합니다.

결론

따라서 equals 메서드와 hashCode 메서드는 서로 밀접한 관계가 있습니다.

만약 equals 메서드를 구현했다면, hashCode 메서드도 구현해줘야 합니다. 두 메서드를 같이 구현하지 않으면 HashMap 등에서 예상치 못한 결과가 발생할 수 있습니다.

728x90