반응형
자바 스프링에서 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
https://thenicesj.tistory.com/372
https://thenicesj.tistory.com/657
반응형
'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 |
댓글