[Spring] @AllArgsConstructor, @RequiredArgsConstructor 위험성

민스킴·2024년 8월 20일
0

Spring

목록 보기
9/12

Spring 프로젝트를 진행하면서 Lombok 라이브러리는 매우 유용하게 사용하고 있습니다. 그런데 일반적인 상황에서 지양해야 하는 어노테이션이 존재합니다.

왜 쓰지 말래?

@AllArgsConstructor 어노테이션은 클래스에 존재하는 모든 필드에 대한 생성자를 자동으로 생성하는데, 인스턴스 멤버의 선언 순서에 영향을 받기 때문에 변수의 순서를 바꾸면 생성자의 입력 값 순서도 바뀌게 되어 검출되지 않는 치명적인 오류를 발생시킬 수 있습니다.
(참고 : https://kwonnam.pe.kr/wiki/java/lombok/pitfall

@RequiredArgsConstructor 어노테이션도 같은 이유로 지양해야 합니다.

@Data 어노테이션도 남용하는 것을 지양해야 합니다.

언제 사용할 수 있나

사실 @RequiredArgsContructor 어노테이션은 자주 사용합니다. 바로 IoC 상황에서 많이 사용하죠.
스프링을 사용하면 스프링 빈의 라이프 사이클은 알아서 관리해줍니다. 직접 인스턴스를 생성하지 않기 때문에 생성자를 호출하지 않습니다. 그렇다면 @RequiredArgsConstructor 어노테이션의 생성자 변수 순서의 위험성은 신경 쓸 필요가 없는 것이죠.

@Data 어노테이션의 경우에도 dto 클래스에서는 사용해도 무방하다고 생각합니다. 필수 필드(식별자 필드) 1개만 final 옵션으로 지정해서 생성자 주입을 하고 나머지 필드는 setter를 사용해서 설정하는 방식으로 사용하면 될 것 같습니다.

출처

https://kwonnam.pe.kr/wiki/java/lombok/pitfall

https://dev-jhl.tistory.com/entry/Lombok-%EC%98%AC%EB%B0%94%EB%A5%B8-Lombok-%EC%82%AC%EC%9A%A9%EB%B2%95-Builder

https://medium.com/mo-zza/data-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98-%EC%82%AC%EC%9A%A9%ED%95%B4%EC%95%BC-%EB%90%98%EB%82%98-34d04fb23fea

profile
Boys, be ambitious!

0개의 댓글