인프런 커뮤니티 질문&답변

포키통님의 프로필 이미지
포키통

작성한 질문수

김영한의 실전 자바 - 중급 2편

hashSet에서 hashCode 메서드를 만들 때 질문이 있습니다.

해결된 질문

작성

·

94

0

해당 강의에서 강사님꼐서 IDE를 통해 만드신 hashCode() 오버라이드 메서드는 Object.hash() 함수를 사용했는데요.

저도 똑같이 IDE를 통해서 만들었는데, Object.hashCode() 라는 다른 메서드를 사용해서 만들어 주더라고요.

둘 다 실험해보니까 잘 작동하긴 했는데, 두 메서드의 차이점이 무엇인가요?

왜 강사님이 하실때는 hash() 메서드가 뜨고 제가 할 때는 hashCode() 메서드를 이용해서 만들어 줄까요?

답변 2

1

안녕하세요, 인프런 AI 인턴입니다.

포키통님의 질문에 대해, “hashCode()hash() 메서드의 차이점과 IDE에서의 다른 메서드 사용 상황”에 대해서 답변드리겠습니다.

먼저, Object.hashCode() 메서드는 객체의 해시코드를 반환하는 메서드로, 객체의 메모리 주소 또는 이와 연관된 유일한 번호를 기반으로 한 정수를 반환합니다. 이는 원시적인 해시 코드 생성 방식이며, 주로 객체의 식별값으로 사용됩니다.

반면에, Objects.hash(Object... values) 메서드는 하나 이상의 매개변수를 받아 이들로부터 해시코드를 생성합니다. 이 메서드는 전달된 모든 매개변수의 해시코드를 기반으로 하여 단일 해시코드를 생성하는 데 사용됩니다. Objects.hash()는 내부적으로 Arrays.hashCode(Object[])를 호출하며, 매개변수로 전달된 객체들의 해시코드를 조합하여 결과적인 해시코드를 생성합니다.

IDE에서 자동으로 생성해주는 hashCode() 구현이 Objects.hashCode() 또는 Objects.hash()를 사용하는 이유는 IDE의 설정, 버전, 혹은 사용하는 언어의 버전 등에 따라 달라질 수 있습니다. 일반적으로 많은 필드를 가진 클래스에 대해서 Objects.hash()를 사용하면 편리하며, 단일 필드만 존재하면 Objects.hashCode()를 사용하는 것이 더 간단할 수 있습니다.

포키통님의 상황에 대한 직접적인 설명은 이 글에서 다루고 있는 “Generate로 hash 생성시, hash()와 hashCode()” 질문과 유사합니다. 해당 게시글에서는 IDE를 통해 hashCode 메서드를 생성할 때 Objects.hash()Objects.hashCode() 중 어느 것을 사용해도 되는지, 그리고 그 차이점에 대해 설명하고 있습니다.

“Generate로 hash 생성시, hash()와 hashCode()”

이 정보가 포키통님의 질문에 대한 이해를 돕길 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

0

안녕하세요. 포키통님, 공식 서포터즈 OMG입니다. 

AI 답변과 링크의 y2gcoder님의 답변을 참고해주세요 🙂

감사합니다.

포키통님의 프로필 이미지
포키통

작성한 질문수

질문하기