작성
·
546
0
@Data
public class Member {
private String memberId;
private String name;
public Member() {
}
public Member(String memberId, String name) {
this.memberId = memberId;
this.name = name;
}
}
기본생성자와 모든필드를 가지는 생성자도 Lombok을 통해서 @NoArgsConstructor @AllArgsConstructor
로 어노테이션으로 등록할 수 있는걸로 알고 있는데 @Data만 사용하고 생성자는 어노테이션으로 등록 안하시는 이유가 있을까요?
@Data의 경우 @Setter을 포함하기 때문에 조심히 사용해야 된다 하셨는데 이처럼 주의해야 될 점이 있는건지 궁금합니다
답변 1
0
안녕하세요, 성실한 공작새 님! 공식 서포터즈 codesweaver 입니다.
말씀하신 것처럼 롬복 애노테이션을 활용하면 생성자 코드도 생략할 수 있습니다. 강의에서는 롬복 사용법에 포인트를 두지 않았기에 생성자를 직접 만드신 것 같습니다.
@Data 사용시 주의하실 점이 몇가지 있습니다.
1 불변객체 일 경우 getter/setter 를 제공하면 안되므로 @Data 애노테이션을 사용할 수 없습니다.
2 ToString() 메서드가 무한루프에 빠질 수 있습니다. 두 객체가 상호참조 관계인 경우 ToString() 메서드는 무한루프에 빠질 수 있어 주의가 필요합니다. (이때는 ToString 대상 필드를 지정하여 문제를 회피할 수 있습니다)
3 객체 비교 함수(equals() / hashcode()) 메서드도 자동으로 오버라이딩 되는 부분을 주의해야 합니다. 객체와 객체 일치 비교를 할 때 이 함수 오버라이딩이 문제가 될 가능성도 있습니다. 또 상속 관계인 경우 부모 필드까지 오버라이딩 대상이 되므로 주의가 필요합니다.
감사합니다.