equals와 hashCode는 왜 함께 재정의해야 할까요?

2024. 12. 5. 18:13·백엔드 면접

equals와 hashCode 메서드는 객체의 동등성 비교와 해시값 생성을 위해서 사용할 수 있습니다. 하지만, 함께 재정의하지 않는다면 HashSet, HashMap과 같은 해시값을 사용하는 자료구조를 사용할 때 문제가 발생할 수 있습니다.

 

해시값을 사용하는 자료구조는 hashCode 메서드의 반환값을 사용합니다. 이 메서드를 오버라이딩 하지 않으면 기본적으로 Object 클래스의 hashCode 메서드를 사용합니다. 문제는 Object 클래스에서는 객체의 참조값을 기반으로 해시 코드를 반환합니다. 따라서 동일한 필드값을 갖더라도 모두 다른 해시코드를 반환하므로, 서로 다른 객체라고 판단합니다. hashCode 메서드를 재정의하여 같은 값의 필드에 대해서 항상 같은 해시코드를 반환하도록 해야 합니다.

 

equals 메서드는 해시 충돌이 발생할 경우를 대비해서 재정의해야 합니다. 아주 낮은 확률로 해시 값이 충돌할 수 있는데, 이 경우 해시 자료구조에서는 equals 메서드로 동등성 비교를 해야 합니다. 이 메서드를 오버라이딩 하지 않으면 기본적으로 Object 클래스의 equals 메서드를 사용합니다. 문제는 equals도 hashCode와 마찬가지로 객체의 참조값으로 동일성 비교를 하기 때문에 서로 다른 객체라고 판단해서 데이터 무결성이 깨질 수 있습니다. 결론적으로 equals 메서드를 재정의하여 해시 충돌이 발생할 경우 동등성 비교를 통해 중복된 데이터가 저장되지 않도록 해야 합니다.

 

String, Integer 같은 자바에서 기본적으로 제공하는 객체는 모두 equals와 hashCode가 재정의 되어 있습니다. 따라서 개발자가 직접 만든 객체를 해시 자료구조에 저장하려면 두 메서드를 명시적으로 재정의하는 것이 중요합니다.

'백엔드 면접' 카테고리의 다른 글

@Component, @Controller, @Service, @Repository의 차이에 대해서 설명해주세요.  (0) 2024.12.07
동일성과 동등성에 대해서 설명해 주세요.  (0) 2024.12.06
JPA ID 생성 전략에 대해 설명해 주세요.  (0) 2024.12.05
로그와 메트릭에 대해서 설명해 주세요.  (0) 2024.12.04
얕은 복사와 깊은 복사에 대해서 설명해 주세요.  (0) 2024.12.04
'백엔드 면접' 카테고리의 다른 글
  • @Component, @Controller, @Service, @Repository의 차이에 대해서 설명해주세요.
  • 동일성과 동등성에 대해서 설명해 주세요.
  • JPA ID 생성 전략에 대해 설명해 주세요.
  • 로그와 메트릭에 대해서 설명해 주세요.
이런개발
이런개발
geun-00의 흔적 보관소
  • 이런개발
    내일이 기대되는 오늘
    이런개발
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 백엔드 면접
      • SQL N
        • SUM, MAX, MIN
        • SELECT
        • GROUP BY
        • JOIN
      • Spring
      • JPA
      • 트러블슈팅
      • Infra
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    raid
    티스토리챌린지
    자바
    JPA
    스프링
    토스 페이먼츠
    데브코스
    오블완
    백엔드 면접
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
이런개발
equals와 hashCode는 왜 함께 재정의해야 할까요?
상단으로

티스토리툴바