JAVA
Lombok (@EqualsAndHashCode ) 직접 오버라이드
3분 입문자
2025. 3. 5. 20:49
장 단점
@EqualsAndHashCode를 사용하면 Lombok이 알아서
Equals 와 HashCode를 재정의 해준다.
@EqualsAndHashCode
public Class User {
private Long id;
private String name;
private int age;
}
// 이렇게 하게 되면
// Equals 와 hashCode 를 모든 필드에 대해 비교 후 재정의 하게 된다.
나는 id만 equals 와 hashCode로만 재정의를 하고 싶다고 한다면
직접 오버라이드를 사용 하거나 @EqualsAndHashCode에 정의를 해주면 된다.
Lombok
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class User {
@EqualsAndHashCode.Include
private Long id;
private String name;
private int age;
}
// 이렇게 정의를 하게 되면 id로만 equlas 와 hashCode를 재정의 하게 해준다.
장점 :
코드가 짧고 간결하여 가독성이 좋고 유지보수 부담이 없다.
코드 일관성이 유지가 된다.
단점 :
Lombok이 필드 추가/삭제를 자동으로 하므로 변경 사항을 직접 컨트롤하기 어렵다.
직접 오버라이딩
public class User {
private Long id;
private String name;
private int age;
@Override
public boolean equlas(Object o) {
if(this == o) return true;
if(o == null || getClass() != o.getClass()) return false;
User user = (User) o ;
return Objects.equlas(id , user.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
}
장점 :
로직을 직접 관리할수있어 세밀한 제어가 가능
equlas() 내부 로직을 쉽게 수정 할 수 있다.
단점 :
코드가 길어지고 반복적으로 보인다.
필드 변경 시 직접 수정 해야 하며 , 실수로 equals()에 수정을 하지 않을 수 있다.
둘다 장단점이 있으며 나는 추후 유지보수나 코드 간결성을 위해서 Lombok으로 사용할 예정이다.
모르는 상태로 @EqualsAndHashCode를 사용하면 후에 왜 썻는지 설명을 할 수 없으므로
공부 후 까먹지 않기 위해 작성을 했다.