@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 는 안 붙여도 되나.