Lombok - @Builder와 @NoArgsConstructor 함께 사용시 발생하는 오류와 해결법

song yuheon·2023년 9월 21일
0

Trouble Shooting

목록 보기
19/57
post-thumbnail

LomBok 이란?


Lombok 라이브러리는 Java에서 반복적인 코드를 줄이기 위한 유용한 도구 중 하나이다.
그 중에서도 @Builder@NoArgsConstructor는 자주 사용되는 어노테이션들이다.
그러나 두 어노테이션을 함께 사용하면 때때로 오류가 발생할 수 있다.


1. @Builder@NoArgsConstructor의 기본 동작


  • @Builder:

    • 클래스 레벨에서 사용 시
      1. 생성자가 없는 경우
        @Builder는 클래스의 모든 멤버 변수를 파라미터로 받는 생성자를 생성한다.
      2. 생성자가 이미 있는 경우
        @Builder는 기존의 생성자를 활용하며 새로운 생성자를 생성하지 않는다.
  • @NoArgsConstructor: 파라미터가 없는 기본 생성자를 생성한다.


2. 함께 사용 시 발생하는 문제


@NoArgsConstructor@Builder를 함께 사용하면 @NoArgsConstructor에 의해 기본 생성자가 먼저 생성된다.
그 후, @Builder는 이미 생성자가 존재한다고 판단하여 추가적인 생성자를 생성하지 않는다.

이후 @Builder에 의해 생성된 빌더 클래스 내부에서 해당 타입의 인스턴스를 생성할 때 모든 멤버 변수를 초기화하는 생성자를 호출하려고 시도한다.
해당 생성자가 없을 경우 오류가 발생하게 된다.


3. 해결 방법


  1. @Builder의 생성자 지정
    @Builder 어노테이션에 생성자를 명시적으로 지정하여 충돌을 회피할 수 있다.
@Getter
@Setter
@NoArgsConstructor
public class SampleClass {
    private List<Integer> list;

    @Builder
    public SampleClass(List<Integer> list) {
        this.list = list;
    }
}
  1. @AllArgsConstructor 사용
    @Builder와 함께 @AllArgsConstructor를 사용하면 모든 필드를 파라미터로 받는 생성자가 생성되므로 문제가 해결된다.
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class SampleClass {
    private List<Integer> list;
}

profile
backend_Devloper

0개의 댓글