Lombok 라이브러리는 Java에서 반복적인 코드를 줄이기 위한 유용한 도구 중 하나이다.
그 중에서도 @Builder
와 @NoArgsConstructor
는 자주 사용되는 어노테이션들이다.
그러나 두 어노테이션을 함께 사용하면 때때로 오류가 발생할 수 있다.
@Builder
와 @NoArgsConstructor
의 기본 동작@Builder:
@Builder
는 클래스의 모든 멤버 변수를 파라미터로 받는 생성자를 생성한다.@Builder
는 기존의 생성자를 활용하며 새로운 생성자를 생성하지 않는다.@NoArgsConstructor: 파라미터가 없는 기본 생성자를 생성한다.
@NoArgsConstructor
와 @Builder
를 함께 사용하면 @NoArgsConstructor
에 의해 기본 생성자가 먼저 생성된다.
그 후, @Builder
는 이미 생성자가 존재한다고 판단하여 추가적인 생성자를 생성하지 않는다.
이후 @Builder
에 의해 생성된 빌더 클래스 내부에서 해당 타입의 인스턴스를 생성할 때 모든 멤버 변수를 초기화하는 생성자를 호출하려고 시도한다.
해당 생성자가 없을 경우 오류가 발생하게 된다.
@Builder
어노테이션에 생성자를 명시적으로 지정하여 충돌을 회피할 수 있다.@Getter
@Setter
@NoArgsConstructor
public class SampleClass {
private List<Integer> list;
@Builder
public SampleClass(List<Integer> list) {
this.list = list;
}
}
@Builder
와 함께 @AllArgsConstructor
를 사용하면 모든 필드를 파라미터로 받는 생성자가 생성되므로 문제가 해결된다.@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class SampleClass {
private List<Integer> list;
}