프로그래밍/Spring Boot

[Spring] @EqualsAndHashCode

연유뿌린빙수 2024. 11. 25. 03:34

@Data 어노테이션에서도 다뤘었던 내용이다.

(참고: https://kite-u.tistory.com/107 )

 

간단히 설명하자면, 

Equals와 HashCode 메서드 기능을 둘 다 제공 가능하는 어노테이션이다.

 

어노테이션을 사용하지 않을 때

import java.util.Objects;

public class Person {
    private String name;
    private int age;

    // 자동 생성된 equals()
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }

    // 자동 생성된 hashCode()
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

 

 

 

어노테이션을 사용할 때

import lombok.EqualsAndHashCode;

@EqualsAndHashCode
public class Person {
    private String name;
    private int age;

    // 생성자, 게터, 세터 등...
}

 

 

그 중 of 옵션은 hashCode에서 특정 필드를 지정하는 데에 사용된다.

import lombok.EqualsAndHashCode;

@EqualsAndHashCode(of = {"name", "age"})
public class Person {
    private String name;
    private int age;
    private String address; // 이 필드는 equals()와 hashCode()에서 제외됨

    public Person(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }
}

 

위의 예시에서는 Person의 name과 age 필드에 대하여 equal과 hashcode 메서드가 적용되는 경우이다.