본문 바로가기
IT/Java

[Lombok] @Builder 사용 시 @NoArgsConstructor 에러

by 성준하이 2023. 8. 15.
반응형

자바 스프링에서 Lombok을 사용하여 개발하는 개발자들이 요즘엔 대부분일것이다.

 

lombok 셋팅 관련해서는 아래 참고포스팅 참고 바란다.

 

 

특정 DTO를 사용시 객체 생성을 위해 Builder annotation를 사용할때가 있다.

사용법은 아래 참고포스팅을 참고 바란다.

 

그리고 객체 생성자를 위해서 

RequiredArgsConstructor / NoArgsConstructor / AllArgsConstructor 를 사용해주는데

 

여기서 Builder 랑 NoArgsConstructor 두개만 사용할 경우 에러가 난다.

 

이유는 간단하다.

모든 멤버변수를 받는 생성자가 없는 것이 이유이다.

일부 멤버변수만 갖는 생성자 함수만 존재할 경우에도 같은 에러가 나타난다.

 

이럴 경우엔 AllArgsConstructor 까지 받아주어 모든 멤버변수를 받는 생성자를 만들면 된다.

 

일단 Builder 라는 어노테이션은 비어있는 생성자를 만들어주기에 NoArgsConstructor 는 필요가 없고,

Lombok 공식 사이트에서 @Builder  설명은 

Finally, applying @Builder to a class is as if you added @AllArgsConstructor(access = AccessLevel.PACKAGE) to the class and applied the @Builder annotation to this all-args-constructor. This only works if you haven't written any explicit constructors yourself. If you do have an explicit constructor, put the @Builder annotation on the constructor instead of on the class.

해석하면 다른 생성자를 명시하지 않고 @Builder만 있을 경우엔 @AllArgsConstructor(access = AccessLevel.PACKAGE) 가 자동으로 걸린다는 말이고

 

Builder 만 사용할 경우 패키지 레벨에서는 모든 멤버변수를 갖는 생성자를 만들고,
만약 NoArgsConstructor를 추가할 경우 @AllArgsConstructor(access = AccessLevel.PACKAGE) 가 자동으로 안걸리기에 @AllArgsConstructor 를 수동으로 추가해줘야한다.

참고 포스팅

https://thenicesj.tistory.com/52

 

[java] lombok 사용법

mvc 패턴을 사용하다 보면 dto나 vo에 대해서 다룬적이 있을것이다. 요즘엔 ide에서 편하게 create getter/ setter 가 있어서 상관은없지만, 이 코드들 또한 너무 불필요하게 길다고 느껴진다. 그러기 위

thenicesj.tistory.com

https://thenicesj.tistory.com/372

 

@builder annotation

jpa를 사용중에 entity를 사용하게 되면 일반적인 DTO 와는 다르게 annotation을 주의해서 써야한다. 대표적으로 setter 가 있긴하지만 그 밖에도 builder 부분에서 주의를 해줘야한다. 서비스 단에서 builde

thenicesj.tistory.com

https://thenicesj.tistory.com/657

 

Java Lombok 이란.

자바 스프링을 사용중일때 lombok에 대해서 들어봤을것이다. 설치 관련해서는 아래 참고 포스팅 참고 바란다. https://projectlombok.org Project Lombok projectlombok.org https://zetawiki.com/wiki/%EB%A1%AC%EB%B3%B5_Lombok

thenicesj.tistory.com

 

반응형

'IT > Java' 카테고리의 다른 글

spring-boot-starter-web <dependency추가>  (50) 2023.08.17
@ComponentScan이란 무엇인가?  (45) 2023.08.16
Java Lombok 이란.  (65) 2023.08.14
ResponseEntity란  (51) 2023.08.13
@Component와 @Configuration  (49) 2023.08.12

댓글