-
[Spring] @Builder를 사용할 때 고려해야 할 생성자 문제 알아보기Server/Spring Boot 2021. 11. 21. 00:48728x90반응형
@Builder, @AllArgsConstructor 알아보기
이번 글에서는
@Builder
,@AllArgsConstructor
,@NoArgsConstructor
애노테이션을 사용할 때 알아야 할 점에 대해서 정리해보겠습니다.위와 같이
@Builder
,@NoArgsConstructor
를 사용했을 때Lombok
에서 만들어주는 메소드를 알아보겠습니다.
만들어주는 메소드를 보면
기본 생성자
,빌더 관련 메소드들
을 만들어주는 것을 볼 수 있습니다.Builder
가 어떤 것인지 안다면전체 생성자
가 필요하다는 것을 알 수 있습니다. (Builder가 궁금하다면 여기 에서 확인하실 수 있습니다.)Builder
란 생성자의 매개변수가 많을 때 좀 더 편리하게 객체를 만들 수 있게 도와주는 것이고,Builder
패턴이 어떻게 구현되어 있는지 보면전체 생성자
가 필요하다는 것을 알 수 있습니다.
그래서 위의
Class
처럼@Builder
,@NoArgsConstructor
어노테이션만 사용한 채로 실행하면 위와 같은 에러가 발생합니다. 왜냐하면전체 생성자
가 없기 때문입니다. 잘 생각해보면 당연한 것입니다.Builder
를 통해서 필요한 매개변수만 조립해서 객체를 만들 수도 있고 다 조립해서 만들 수도 있는데 전체 생성자가 없다는 것은 말이 안되기 때문입니다.
그런데 위처럼
@NoArgsConstructor
를 없애고Builder
어노테이션만 존재하면 에러가 발생하지 않습니다. 그래서 이번에@NoArgsConstructor
없이Builder
어노테이션만 있을 때 어떤 메소드를 생성해주는지 알아보겠습니다.
이번에는 아까와는 다르게
전체 생성자
가 생성되어 있는 것을 볼 수 있는데요.@NoArgsConstructor
인 기본 생성자가 없다고 전체 생성자가 생기는 것이 궁금해서@Builder
어노테이션 내부 설명을 읽어보았습니다.
@AllArgsConstructor(access = AccessLevel.PACKAGE)처럼 모든 필드를 인수로 사용하여 Package-Private 생성자가 생성됩니다. 명시적 @XArgsConstrator 주석을 추가하지 않은 경우에만 생성됩니다.
즉,
@NoArgsConstrator
어노테이션이나 다른 생성자가 존재하지 않을 때전체 생성자
를 자동으로 만들어주는 것입니다. 기본 생성자 또는 다른 생성자가 존재한다면 직접전체 생성자
를 만들어주어야 합니다.
기본 생성자가 필요한 상태에서
@Builder
를 사용하고 싶다면 위와 같이기본 생성자
,전체 생성자
,빌더
어노테이션을 사용하면 에러 없이 사용할 수 있습니다.반응형'Server > Spring Boot' 카테고리의 다른 글
[Spring] Spring Boot jar 파일을 AWS EC2에 배포하는 법 (4) 2021.10.22 [Spring] Kotlin에서 @Valid로 @RequestBody DTO 검증하기 (0) 2021.10.22 [Spring] Kotlin 으로 AWS S3 파일 업로드 하는 법 (0) 2021.10.18 [Spring] Spring Security와 Swagger 같이 사용하는 법 (0) 2021.06.27 [Spring] yml 파일 dev, prod, local 환경으로 간단하게 분리하기 (0) 2021.06.16