
자바 개발 시 반복되는 보일러플레이트 코드(Getter, Setter, 생성자)를 획기적으로 줄여주는
Lombok의 핵심 어노테이션 개념과 동작 원리를 정리한 포스트입니다.
자바 코드에 메타데이터를 추가하여 코드 자체에 특별한 의미를 부여하거나,
컴파일러 및 런타임 환경에서 특정 동작을 자동으로 수행하도록 트리거하는 기능입니다.
@Getter, @Setter클래스에 선언된 필드에 접근하고 값을 수정하기 위한 getter, setter 메서드를 컴파일 시점에
자동으로 생성합니다.
@Getter
@Setter
public class User {
private String name;
private int age;
/* [Lombok이 내부적으로 자동 생성해 주는 코드]
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
*/
}
객체 생성 방식과 초기화할 필드의 범위에 따라 적절한 어노테이션을 선택해 사용합니다.
| 어노테이션 | 생성자 파라미터 대상 | 사용 목적 및 특징 |
|---|---|---|
@NoArgsConstructor | 없음 (()) | 파라미터가 없는 기본 생성자 생성 |
@AllArgsConstructor | 클래스의 모든 필드 | 선언 순서대로 모든 필드 값을 받아 초기화 |
@RequiredArgsConstructor | final 또는 @NonNull 필드 | 반드시 초기화가 필요한 필수 필드만 골라 생성자 생성 (의존성 주입 시 빈번히 활용) |
@NoArgsConstructor & @AllArgsConstructor@NoArgsConstructor
@AllArgsConstructor
public class User {
private String name;
private int age;
/* [@NoArgsConstructor 생성 코드]
public User() {}
*/
/* [@AllArgsConstructor 생성 코드]
public User(String name, int age) {
this.name = name;
this.age = age;
}
*/
}
public class Main {
public static void main(String[] args) {
// 1. @NoArgsConstructor 기본 생성자 활용 (빈 객체 생성)
User user1 = new User();
// 2. @AllArgsConstructor 모든 필드 생성자 활용 (선언 순서대로 초기화)
User user2 = new User("홍길동", 25);
}
}
@RequiredArgsConstructor (필수 필드 초기화)초기화가 강제되는 final 키워드가 붙은 필드만을 대상으로 생성자를 생성합니다.
(스프링 환경에서 생성자 주입 방식으로 매우 자주 사용됩니다.)
@RequiredArgsConstructor
public class Member {
private final String id; // 필수 (final)
private final String name; // 필수 (final)
private int age; // 일반 필드 (생성자 파라미터 제외)
/* [Lombok이 내부적으로 자동 생성해 주는 코드]
public Member(String id, String name) {
this.id = id;
this.name = name;
}
*/
}
// 사용 예시: final로 선언된 id와 name만 매개변수로 넘겨 인스턴스화
Member member = new Member("user1", "홍길동");