개발자가 되고 싶은 개발자

eqauls와 hashCode는 함께 재정의해야 하는 이유 (feat. 동일성과 동등성) 본문

Dev/Java & Spring

eqauls와 hashCode는 함께 재정의해야 하는 이유 (feat. 동일성과 동등성)

Fullth 2024. 12. 16. 23:28

Photo by Michele Wales on Unsplash

Preface

  • 동일성과 동등성은 객체를 비교할 때 중요한 개념입니다.
  • Java에서는 equals() 메서드와 == 연산자를 통해 구분할 수 있습니다.
  • Spring에서는 lombok의 @EqualsAndHashCode 어노테이션을 이용합니다.

equals() 메서드와 == 연산자의 차이

  • 객체 비교 대상에서의 차이가 존재합니다.
  • eqauls() 메소드는 객체의 내용을 비교하고, == 연산자는 객체의 참조를 비교합니다.
  • 따라서 두 객체의 내용이 같더라도, 서로 다른 객체라면 eqauls()는 true를,
    == 연산자는 fasle를 반환합니다.

동등성

  • 평가의 대상인 객체의 내용이 같은지를 비교하는 개념입니다.
  • 자바에서는 equals()메서드를 사용하여 객체의 동등성을 비교합니다.
class Team {
    private List<String> members;
    private String name;

    ...생략

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Team team = (Team) obj;
        return Objects.equals(name, team.name) && 
               Objects.equals(members, team.members);
    }
    
    @Override
    public int hashCode() {
        return Objects.hashCode(name, member);
    }
}
  • Object 클래스의 equals() 메서드는 == 연산자를 사용하여 동일성을 비교합니다.
  • 자바의 모든 클래스는 Object 클래스를 상속하여 동일성을 비교합니다.
  • 그래서 동등성 비교가 필요한 클래스에서 필요에 맞게 두 메서드를 오버라이딩해야 합니다.

학습 자료

 

 

equals와 hashCode는 왜 같이 재정의해야 할까?

equals와 hashCode는 같이 재정의하라는 말을 다들 한 번쯤 들어봤을 것이다. 대부분의 IDE Generate 기능에서도 equals와 hashCode를 같이 재정의해주며 lombok에서도 EqualsAndHashCode…

tecoble.techcourse.co.kr

 

 

@EqualsAndHashCode

 

projectlombok.org

 

'Dev > Java & Spring' 카테고리의 다른 글

[Spring] SpringBoot 실행 후 바로 종료될 때  (0) 2022.03.06
[Java] Stack Class  (0) 2022.02.16
[Spring Boot] Exception: Required request body is missing  (0) 2022.01.24
[Java] JVM 메모리 구조  (0) 2022.01.01
[Java] Comparator  (0) 2021.12.24