본문 바로가기

BackEnd/Spring Boot

@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor

@NoArgsConstructor

  • 파라미터가 없는 기본 생성자 생성
  • 만약 클래스에 final 필드가 있다면 이 어노테이션은 사용할 수 없다. final 필드는 생성자에서 초기화가 이루어져야하기 때문.
  • @NoArgsConstructor(force=true) 옵션을 주면, final 필드들은 강제로 0 / false / null 로 초기화 된다.
  • 만약 클래스에 @NonNull 이 붙은 필드가 있다면 해당 필드에 대해서는 제약 조건을 검사하지 않는다. 

 

원래는 @NonNull 어노테이션으로 필드와 생성자를 선언하면, Lombok 에서 필드가 null 인지 체크하는 코드를 자동으로 생성해준다. 하지만 @NoArgsConstructor 어노테이션을 사용할 때는 이러한 null check 코드가 생성되지 않으므로, 생성된 객체의 @NonNull 필드는 나중에 별도로 초기화해 주어야 하고, 사용에 주의가 필요하다.

아래는 @NonNull 어노테이션을 사용하는 예제코드이다.

import lombok.NonNull;

public class Example {
    @NonNull
    private String name;

    public Example(@NonNull String name) {
        this.name = name;
    }
}

 

 

@RequiredArgsConstructor

  • 1) 초기화 되지 않은 final 필드, 2) 선언시 초기화되지 않은 @NonNull 이 붙은 필드 를 매개변수로 가지는 생성자 생성
  • @NonNull 필드에 대해서는 null check 코드도 생성된다.
  • @NonNull 필드가 null 일 경우, NullPointerException 발생.
  • 생성자의 Parameter 순서는 클래스에 선언된 필드의 순서대로 매칭 된다.

 

 

@AllArgsConstructor

  • 모든 필드를 매개변수로 가지는 생성자 생성
  • @NonNull 필드에 대해서는 null check 코드도 생성된다.

 

@Data 사용 지양 이유?

@Data 는 왜 @RequiredArgsConstructor만 포함하고 있는가.

@Setter 사용 지양 이유?

@Builder 사용하면, @Setter 는 안 붙여도 되나.