프로그래밍/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 메서드가 적용되는 경우이다.