빌더 패턴 공부하고 적용해보겠답시고 빌더 어노테이션을 쓴 뒤 실행하자 발생한 오류
error: constructor CommentDto in class CommentDto cannot be applied to given types;
@Builder
^
required: no arguments
found: Long,String,String,String,String,Long
reason: actual and formal argument lists differ in length
오류가 나고있는 부분은 CommentDto class 부분
@Builder와 @NoArgsConstructor 어노테이션을 함께 사용하면서 모든 멤버 변수를 받는 생성자가 없어서 터지는 오류이다.
뿐만 아니라 일부 멤버변수만 갖는 생성자를 가질때에도 해당 오류가 난다.
lombok 공식 홈페이지 builder 부분에 의하면 https://projectlombok.org/features/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. Note that if you put both '@Value' and '@Builder' on a class, the package-private constructor that '@Builder' wants to generate 'wins' and suppresses the constructor that '@Value' wants to make.
여러 구글링과 공식 문서를 보면 @AllArgsConstructor 어노테이션이 상황에 따라 적용되도록 되어있는데..
@NoArgsConstructor가 오면서 안되는거같기도.. 어디서 보면 setter가 없어서 그런거라고도 하는데 암튼 그런가봉가
해결은 간단하다. 모든 멤버 변수가 매개변수로 있는 생성자를 직접 작성하던가 @AllArgsConstructor 어노테이션을 추가해주면 된다.
여기서 잠깐!
#### 생성자 관련 어노테이션 정리 ###
@RequiredArgsConstructor
초기화되지 않은 final이나 NonNull의 생성자를 생성하여 의존성 주입 시 사용
* @NonNull 필드들은 추가적인 null check 로직이 생성되어 null값이 들어오면 NullPointException 발생
@AllArgsConstructor
모든 필드에 대한 생성자 생성
* @NonNull 필드들은 자동으로 null check 로직 생성
@NoArgsConstructor
파라미터가 없는 생성자 생성
필드들이 final로 생성되어 있는 경우 필드를 초기화할 수 없어 생성자를 만들 수 없고 에러 발생 → @NoArgsConstructor(force=true)
@NonNull 처럼 필드에 제약조건이 설정되어 있는 경우 생성자 내 null check 로직이 생성되지 않음
##########################
https://github.com/projectlombok/lombok/issues/1389
https://yuja-kong.tistory.com/99
[SPRING] MultipartFile 게시판 이미지 업로드(1) 간단한 파일 업로드 예제 (1) | 2022.01.10 |
---|---|
[SPRING] Model, ModelMap, ModelAndView 차이점 (0) | 2021.11.14 |
[ERROR] 스프링부트 UnsatisfiedDependencyException (0) | 2021.08.24 |
[QueryDSL] 동적쿼리로 사용자 조회하기 (0) | 2021.05.18 |
[QueryDSL] 카테고리별 게시글 조회 (0) | 2021.04.29 |
댓글 영역