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

윾민님의 프로필 이미지
윾민

작성한 질문수

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

직접 구현하는 Set3 - 직접 만든 객체 보관

hashCode를 오버라이딩 했을때 반환하는게 틀려요.

작성

·

195

·

수정됨

1

@Override
public int hashCode() {
    return Objects.hashCode(id);
}

이걸로 ide가 만들어주네요. 업데이트 된 건가요?

해쉬코드가 다르게 나와서 다른 인덱스에 채워지네요.

강의처럼 아래와 같이 하면,

@Override
public int hashCode() {
    return Objects.hash(id);
}

강의와 똑같이 같은 인덱스에 채워집니다.

Objects의 hash 메서드와 hashCode 메서드의 차이가 무엇일까요? 왜 인텔리제이는 hashCode 메서드를 생성했을까요?

답변 1

1

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

윾민님의 질문에 대해, “Objects의 hash 메서드와 hashCode 메서드의 차이점 및 IDE가 hashCode 메서드를 생성하는 이유”에 대해 답변드리겠습니다.

Objects.hashCode(Object o) 메서드는 단일 객체의 해시코드를 반환하는 메서드입니다. 이는 객체가 null일 경우 0을 반환하며, 그렇지 않을 경우 Object.hashCode()를 호출합니다. 따라서, 주로 단일 객체의 해시코드가 필요할 때 사용됩니다.

Objects.hash(Object... values) 메서드는 내부적으로 입력받은 각 객체의 hashCode() 메서드를 호출하여 그 결과를 바탕으로 최종 해시코드를 생성합니다. 이 메서드는 배열의 해시코드를 계산하는 Arrays.hashCode(Object[]) 메서드를 사용하여 다수의 객체로부터 하나의 해시코드를 계산합니다. 해당 메서드는 주로 두 개 이상의 필드를 가진 객체에서 이 필드들을 조합하여 하나의 해시코드를 생성할 때 사용됩니다.

IDE가 Objects.hashCode()를 사용하여 hashCode() 메서드를 자동 생성하는 경우와 Objects.hash()를 사용하는 경우의 차이는 주로 사용하는 IDE의 설정 또는 버전, 혹은 자동 생성 로직에 따라 다를 수 있습니다. 일부 IDE는 객체의 속성이 단일일 경우 Objects.hashCode(Object o)를, 속성이 다수인 경우 Objects.hash(Object... values)를 사용해서 hashCode() 메서드를 생성할 수 있습니다.

윾민님의 경우 두 메서드의 사용으로 인해 해시코드와 인덱스 계산에 차이가 발생한 것으로 보입니다. 이는 Objects.hash()가 여러 개의 입력값을 처리할 때 내부적으로 사용하는 알고리즘이 Objects.hashCode()와 다르기 때문입니다.

이와 관련된 유사한 질문에 대한 답변으로는 “Generate로 hash 생성시, hash()와 hashCode()”가 있습니다. 이 답변은 IDE를 통해 hashCode 메서드를 생성할 때 Objects.hash()Objects.hashCode() 중 어느 것을 사용해도 되는지에 대해 설명하고 있으며, 그 차이점에 대해 설명하고 있습니다. 이 정보가 윾민님의 궁금증을 해소하는 데 도움이 되길 바랍니다.

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

윾민님의 프로필 이미지
윾민

작성한 질문수

질문하기