Spring

[Spring] @Builder + @NoArgsConstructor 사용 시 발생하는 이슈

소범범 2023. 3. 27. 10:55

Title

@Buillder 와 @NoArgsConstructor를 같이 사용하지 못하는 이유에 대한 글입니다.

 

Issue

API Controller Request DTO를 생성하던 중 @Builder를 사용하려고 했으나, @NoArgsConstructor와 함께 사용하면 에러가 나는 이슈가 발생했습니다.

 

Why

먼저 @Builder를 사용하는 이유를 파악해야합니다.

Lombok에서 제공하는 @Builder 어노테이션은 매개변수가 많을 때 좀 더 편리하게 객체를 만들 수 있게 도와주는 것입니다.

Build 되는 매개변수를 Build 하기위한 전체 생성자가 필요합니다.

@Builder 는 기본적으로 전체생성자 및 빌더 관련 메소드들을 만들어주고 있는데,

클래스 자체에 붙는 @Builder 어노테이션은 해당 클래스에 어떠한 생성자가 존재한다면 전체 생성자를 생성해 주지 않습니다.

여기서 문제가 발생합니다!!

위 내용을 토대로 이슈를 살펴볼때

기본 생성자를 생성해주는 @NoArgsConstructor와 Builder 를 함께 사용하면,

@Builder를 사용하더라도 전체 생성자를 생성해 주지 않게 되고,

전체 생성자가 필요한 상황에서 에러를 발생하게 됩니다.

 

Solution

 

그렇다면 문제의 해결은 간단합니다.

전체 생성자를 따로 생성해줘야 합니다.

방안은 경우에 따라 두가지 방안이 있습니다.

방안1 : @NoArgsConstructor + @Builder + @AllArgsConstructor 함께 사용

방안2 : 기본생성자가 필요 없을때는 @Builder만 독립적으로 사용

 

Reference

https://devlog-wjdrbs96.tistory.com/419