Annotation

정광훈(단기심화_9기)·2026년 9월 4일

Java / Spring

목록 보기
3/10
post-thumbnail

[Java/Lombok] 주요 롬복 어노테이션 총정리 (@Getter/@Setter 및 생성자 3종 비교)

자바 개발 시 반복되는 보일러플레이트 코드(Getter, Setter, 생성자)를 획기적으로 줄여주는
Lombok의 핵심 어노테이션 개념과 동작 원리를 정리한 포스트입니다.


1. 어노테이션(Annotation)이란?

자바 코드에 메타데이터를 추가하여 코드 자체에 특별한 의미를 부여하거나,
컴파일러 및 런타임 환경에서 특정 동작을 자동으로 수행하도록 트리거하는 기능입니다.


2. 접근자 / 수정자 자동 생성: @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; }
    */
}

3. 생성자 자동 생성 어노테이션 3종 비교

객체 생성 방식과 초기화할 필드의 범위에 따라 적절한 어노테이션을 선택해 사용합니다.

어노테이션생성자 파라미터 대상사용 목적 및 특징
@NoArgsConstructor없음 (())파라미터가 없는 기본 생성자 생성
@AllArgsConstructor클래스의 모든 필드선언 순서대로 모든 필드 값을 받아 초기화
@RequiredArgsConstructorfinal 또는 @NonNull 필드반드시 초기화가 필요한 필수 필드만 골라 생성자 생성 (의존성 주입 시 빈번히 활용)

📌 1) @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);
    }
}

📌 2) @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", "홍길동");
profile
내배캠 Unity_9기 / 게임 서버 단기 심화_9기

0개의 댓글