Lombok은 컴파일 과정의 Annotation Processing 단계에 개입하여,
소스 코드에 대한 AST(Abstract Syntax Tree, 추상 구문 트리)를 수정하거나 필요한 코드를 자동 추가한다.
동작 구조는 다음과 같다.
단계 | 핵심 | 설명 |
1단계 | javac의 컴파일 과정 | 자바 소스 파일을 읽고, AST(Abstract Syntax Tree)로 변환. |
2단계 | Lombok의 역할 | Lombok이 컴파일 중 어노테이션을 처리하고 AST(Abstract Syntax Tree)에 필요한 코드 추가. |
3단계 | 바이트 코드 생성 | 수정된 AST를 기반으로 바이트 코드(.class 파일) 생성. |
4단계 | 컴파일 단계와 Annotation Processing | Lombok이 AST를 수정하며, 필요 시 컴파일 재시작 가능. |
자주 사용하는 Lombok 어노테이션은 다음과 같다.
어노테이션 | 설명 |
@Getter / @Setter | 클래스 필드에 대한 getter 및 setter 메서드를 자동으로 생성. |
@Data | @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor를 포함한 종합적인 어노테이션. |
@NoArgsConstructor | 매개변수가 없는 기본 생성자를 생성. |
@AllArgsConstructor | 모든 필드를 인자로 받는 생성자를 생성. |
@RequiredArgsConstructor | final이나 @NonNull 필드를 인자로 받는 생성자를 생성. |
@ToString | toString() 메서드를 자동으로 생성. |
@EqualsAndHashCode | equals()와 hashCode() 메서드를 자동으로 생성. |
@Builder | 빌더 패턴을 쉽게 사용할 수 있도록 지원. |
@Slf4j | 클래스에 로그 기능을 추가 |
@Value | Data와 비슷하지만, 불변 객체를 만들 때 사용. 모든 필드를 private final로 선언하고, setter가 없이 getter만 자동으로 생성. |
@NonNull | 필드나 파라미터가 null이 될 수 없음을 보장. |
'Dev > Java' 카테고리의 다른 글
Gradle은 무엇인가? 의존성 관리는 왜 필요한가? (1) | 2024.10.25 |
---|---|
final에 대한 이해 (0) | 2024.10.24 |
static 변수와 static 메서드를 왜 쓸까? (0) | 2024.10.24 |
Java Virtual Machine & Runtime Data Areas (2) | 2024.10.23 |
오랜만에 Java 문법 (2) | 2024.10.20 |