@Builder와 @NoArgsConstructor를 함께 사용하려면, @AllArgsConstructor도 함께 사용하거나 모든 필드를 가지는 생성자를 직접 만들어 줘야 한다. 또한, @Builder를 사용할 때 @NoArgsConstructor뿐만 아니라 손수 만든 다른 생성자가 있다면, 그 때도 모든 필드를 가지는 생성자가 필요하다.
문제 발생
아래처럼 @Builder와 @NoArgsConstructor를 함께 사용하면, 컴파일 시 에러가 발생한다.
// @Getter @Setter @EqualsAndHashCode 등등
@Builder
@NoArgsConstructor
public class MyName {
private String first;
private String last;
}
Error:(7, 1) java: constructor MyName in class kr.leocat.test.MyName cannot be applied to given types;
required: no arguments
found: java.lang.String,java.lang.String
reason: actual and formal argument lists differ in length
그리고 @NoArgsConstructor가 아니더라도, 아래처럼 일부 필드만을 가지는 생성자를 가지는 경우에도 컴파일이 되지 않는다.
// @Getter @Setter @EqualsAndHashCode 등등
@Builder
public class MyName {
private String first;
private String last;
public MyName() { ... }
}
.. 또는 ..
// @Getter @Setter @EqualsAndHashCode 등등
@Builder
public class MyName {
private String first;
private String last;
public MyName(String last) { ... }
}
해결방법
@AllArgsConstructor도 함께 달아주거나 모든 필드를 가지는 생성자를 만든다.
// @Getter @Setter 등등
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MyName {
private String first;
private String last;
}
.. 또는 ..
// @Getter @Setter 등등
@Builder
@NoArgsConstructor
public class MyName {
private String first;
private String last;
MyName(String first, String last) { ... }
참고
https://blog.leocat.kr/notes/2018/09/02/lombok-using-builder-and-noargsconstructor-together
@NoArgsConstructor, @AllArgsConstructor - lombok
https://projectlombok.org/features/constructor
'Spring' 카테고리의 다른 글
스프링 빈 순환 참조 (The dependencies of some of the beans in the application context form a cycle) (0) | 2020.05.05 |
---|---|
스프링 시큐리티 코어 (0) | 2020.05.04 |
@ExceptionHandler를 통한 예외처리 (0) | 2020.04.11 |