본문 바로가기
Dev/Java

Lombok은 어떤 원리로 동작할까?

by 세대교체 2024. 10. 21.

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이 될 수 없음을 보장.