[Spring] Lombok 어노테이션 주의사항
제가 작성한 코드를 동료 개발자가 보더니, @AllArgsConstructor
를 사용하여 추후 발생할 수 있는 문제에 대해 말해주셨습니다. 그리고 다음 링크를 읽어보면 좋을 것 같다고 추천했습니다. 잘 모르면서 어노테이션을 남발해서 사용했던 것 같아서 반성하는 시간을 가졌습니다.
위 글에서는 많은 것들을 금지하고 있는데, 여기서는 @AllArgsConstructor
어노테이션에 대해서만 설명하고, 추후 글을 보충하도록 하겠습니다.
@AllArgsConstructor, @RequiredArgsConstructor 사용금지
@AllArgsConstructor
public static class User {
private String id;
private String name;
}
다음과 같이 DTO를 생성하는 경우, 두 필드에 대해 순서를 바꾸게 되면 개발자가 인식하지 못한사이에 name 에 id 가, id에 name이 들어갈 수 있습니다. 심지어 둘이 동일한 타입이라면 더더욱 인식하기 힘듭니다. 개발자와 IDE 모두 감지 하기 힘들기 때문에 아예 사용을 금지하는 것이 좋습니다.
이것은 @AllArgsConstructor 와 @RequiredArgsConstructor 모두에 해당될 수 있는 문제입니다. 대신 위 코드의 경우 직접 생성자를 만들고 다음과 같이 @Builder 애노테이션을 붙여서 사용하는 것이 좋습니다.
public static class User {
private String id;
private String name;
@Builder
private User(String id, String name) {
this.id = id;
this.name = name;
}
}
결론
결론은 실무 프로젝트에서라면 @Getter, @Setter, @ToString 정도만 사용하는 것이 좋을 것 같습니다.
잘 알지 못하면서 어노테이션을 남발하지 맙시다!
댓글남기기