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.
프로젝트 import 하고 뜬 경고 문구!
롬복 쓰다가 @Data가 있는 곳마다 @EqualsAndHashCode로 callSuper 옵션 false를 주란다.
@Data는 constructor, getter, setter, toString, equals, hashcode 등 메서드를 자동으로 생성한다.
이때 만들어진 equals와 hashcode 메소드가 부모 클래스 필드까지 고려할지 안 할지를 설정할 수 있다.
- callSuper = true: 부모클래스 필드 값도 동일한지 체크
- callSuper = false: 본인클래스 필드 값만 고려
@Data는 아주 강력해서 코드를 간결하게 짤 수 있다는 장점이 있지만 각 메서드가 만들어졌을 때 코드에 어떤 영향을 주는지 확실하게 알지 못한 채 사용한다면 side effect가 생길 가능성이 다분하다......
이번 기회에 lombok에서 조심해서 써야하는 어노테이션을 몇 가지 알 수 있었는데,
평소에 종종 쓰던 @AllArgsConstructor, @RequiredArgsConstructor는 생성자를 편리하게 만들어준다.
이 어노테이션들은 클래스에 정의된 순서에 따라 생성자 파라미터 순서를 정하므로 특히 자료형이 같은 경우 예상치 않은 동작 결과를 낼 수 있다.
따라서 대안으로 생성자를 하나 만든 뒤 @Builder를 사용하는 것을 추천한다.
빌더 패턴에서는 파라미터 순서로 생성자를 만들었던 @AllArgsConstructor, @RequiredArgsConstructor와 달리, 이름으로 값을 설정하기 때문에 리팩터링 하기 용이하다.
관련해서 자세하게 소개해주시는 링크!
https://kwonnam.pe.kr/wiki/java/lombok/pitfall
'Web Application > Backend' 카테고리의 다른 글
[TIL] Java 데이터 타입과 int, Integer (0) | 2021.10.17 |
---|---|
[TIL] 이클립스 디버그 모드 (0) | 2021.10.05 |
[TIL] gradle, gradle wrapper (0) | 2021.09.25 |
[백엔드 시작하기] 8. 클라우드 서버에 데이터베이스 만들기 (0) | 2021.05.12 |
[백엔드 시작하기] 7. 클라우드 서버에 배포하기 (0) | 2021.05.12 |