[JAVA] 상속받은 클래스에 @Data와 @EqualsAndHashCode 사용하기

yeonjoo913·2023년 7월 25일

JAVA

목록 보기
8/19

@Data,@EqualsAndHashCode이 두 개의 어노테이션들은 Lombok 라이브러리에서 제공하는 어노테이션이다.
이 어노테이션을 사용할 때 워닝이 발생 할 수 있다.

warning

warning: Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add '@EqualsAndHashCode(callSuper=false)' to your type.@Data

-> 상속을 받는 클래스에 @Data 를 사용하는 경우 @EqualsAndHashCode를 따로 선언해서 설정해줘야한다고 워닝이 뜸

어노테이션을 추가하면 되지만 왜 필요할까?

@Data 어노테이션은 아래와 같은 어노테이션을 포함하고 있다.

  • @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode
  • 모든 필드를 대상으로 접근자, 설정자가 자동 생성되고, final또는 @NotNull 필드 값을 파라미터로 받는 생성자가 만들어지고.toString,equals.hashCode 메소드가 자동으로 만들어진다.

위와 같이 @Data는 @EqualsAndHashCode를 포함하고 있는데, 만약 상속 구조라면 부모 클래스의 필드를 포함해서 EqualsAndHashCode를 생성할지, 자식 클래스만 대상으로 생성할지 Lombok이 보기에 불분명하기 때문에 우선 callSuper 옵션 값의 default 인 false로 만들긴하지만 워닝을 띄운다.

@EqualsAndHashCode(callSuper = true)

위 어노테이션을 붙여주지 않으면, 부모 클래스의 필드를 제외하고 @EqualsAndHashCode를 생성해서 발생하는 워닝이다.


마치며
@Data는 사용을 지양하라고 한다.. 게터세터를 활용하자...

profile
주니어 백엔드 개발자. 까먹는다 기록하자!

0개의 댓글