
Java에서는 객체 생성 시 생성자가 필수입니다. 하지만 매번 생성자를 작성하는 건 번거롭고 오류 가능성도 있습니다.
이때 Lombok의 생성자 관련 애노테이션을 사용하면 코드를 훨씬 간결하게 만들 수 있습니다.
@NoArgsConstructor매개변수가 없는 생성자(기본 생성자)를 생성해줍니다.
@NoArgsConstructor
public class User {
private String name;
private int age;
}
// 생성되는 코드
public User() {
}
@AllArgsConstructor모든 필드를 인자로 받는 생성자를 생성합니다.
@AllArgsConstructor
public class Authentication {
private String username;
private String password;
private Role authority;
}
// 생성되는 코드
public Authentication(String username, String password, Role authority) {
this.username = username;
this.password = password;
this.authority = authority;
}
@Builder와 함께 사용하여 다양한 생성 방법 제공@RequiredArgsConstructor필수 필드(final 또는 @NonNUll이 붙은 필드)만 인자로 받는 생성자를 생성합니다.
@RequiredArgsConstructor
public class Sample {
private final String name;
private final int age;
private String address; // final 아님
@NonNull
private String email;
}
// 생성되는 코드
public Sample(String name, int age, @NonNull String email) {
if (email == null) {
throw new NullPointerException("email is marked non-null but is null");
}
this.name = name;
this.age = age;
this.email = email;
}
생성자 매개변수 순서는 필드 선언 순서를 따름
→ 필드 순서를 변경하면 생성자 시그니처도 변경됨
@NoArgsConstructorfinal 필드는 기본 생성자로 초기화 불가 → 컴파일 에러
@NoArgsConstructor에서 final 필드가 있으면 컴파일 에러force = true 옵션 (@NoArgsConstructor(force = true))으로 해결 가능하지만 final 필드가 null, 0 등으로 초기화됨롬복은 부모 클래스의 필드는 생성자에 포함하지 않음
@SuperBuilder 사용 또는 명시적 생성자 작성 필요