⚡ 1. 롬복(Lombok)이란?
Lombok(롬복) 은 반복적인 보일러플레이트(Boilerplate) 코드를 자동으로 생성하는 Java 라이브러리입니다.
예를 들어, Getter, Setter, 생성자, toString() 등을 직접 작성할 필요 없이 어노테이션만으로 자동 생성할 수 있습니다.
📌 Lombok을 사용하면 코드가 간결해지고 유지보수가 쉬워짐
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private String name;
private int age;
}
📌 위 코드 실행 시 자동으로 getName(), setAge() 등의 메서드가 생성됨
⚡ 2. Lombok은 어떻게 동작할까? (어노테이션 프로세서)
✅ 1) Lombok의 핵심 동작 방식
Lombok은 컴파일 타임(Compile-Time) 에 작동하는 어노테이션 프로세서(Annotation Processor) 를 사용합니다.
💡 기본 개념
1️⃣ 개발자가 @Getter, @Setter 같은 Lombok 어노테이션을 코드에 추가
2️⃣ Java 컴파일러가 어노테이션 프로세서 를 실행
3️⃣ Lombok의 Annotation Processor(AP) 가 클래스 코드를 분석
4️⃣ 바이트코드를 수정하여 필요한 메서드를 자동으로 추가
5️⃣ 최종적으로 JVM이 실행할 수 있는 바이트코드가 생성됨
📌 즉, Lombok은 Java 소스를 직접 수정하는 것이 아니라, 컴파일 중간 과정에서 바이트코드를 조작하여 메서드를 추가함!
✅ 2) 어노테이션 프로세서(Annotation Processor)란?
• 컴파일러가 특정 어노테이션을 감지하고, 해당 어노테이션에 맞는 코드를 자동 생성하는 기능
• Lombok은 Java의 javax.annotation.processing 패키지를 활용하여 구현됨
• Spring의 @ComponentScan, JPA의 @Entity 등도 내부적으로 어노테이션 프로세서를 사용
⚡ 3. Lombok의 어노테이션 프로세싱 과정
🏗 Lombok의 어노테이션 프로세서 흐름
1. 개발자가 @Getter, @Setter 추가
↓
2. Java 컴파일러가 Lombok 어노테이션 발견
↓
3. Lombok의 Annotation Processor가 실행됨
↓
4. AST(Abstract Syntax Tree) 분석 후 Getter/Setter 메서드 추가
↓
5. 최종적으로 변경된 바이트코드가 생성됨
📌 Lombok은 바이트코드를 직접 수정하여 개발자가 작성하지 않은 메서드를 추가하는 방식으로 동작함!
⚡ 4. Lombok의 주요 어노테이션과 동작 방식
✅ 1) @Getter & @Setter
• 클래스의 필드에 대해 자동으로 Getter/Setter 메서드를 생성
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private String name;
private int age;
}
📌 컴파일 후
public class User {
private String name;
private int age;
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; }
}
✅ 2) @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor
• 자동으로 생성자(Constructor)를 추가
import lombok.*;
@NoArgsConstructor // 기본 생성자
@AllArgsConstructor // 모든 필드를 포함한 생성자
@RequiredArgsConstructor // final 필드만 포함한 생성자
public class User {
private String name;
private final int age;
}
📌 컴파일 후
public class User {
private String name;
private final int age;
public User() {} // @NoArgsConstructor
public User(String name, int age) { // @AllArgsConstructor
this.name = name;
this.age = age;
}
public User(int age) { // @RequiredArgsConstructor (final 필드만 포함)
this.age = age;
}
}
✅ 3) @ToString
• 클래스의 필드를 포함하는 toString() 메서드를 자동 생성
import lombok.ToString;
@ToString
public class User {
private String name;
private int age;
}
📌 컴파일 후
public class User {
private String name;
private int age;
@Override
public String toString() {
return "User(name=" + this.name + ", age=" + this.age + ")";
}
}
✅ 4) @Builder
• 빌더 패턴을 자동 생성
import lombok.Builder;
@Builder
public class User {
private String name;
private int age;
}
📌 컴파일 후
public class User {
private String name;
private int age;
public static UserBuilder builder() {
return new UserBuilder();
}
public static class UserBuilder {
private String name;
private int age;
public UserBuilder name(String name) {
this.name = name;
return this;
}
public UserBuilder age(int age) {
this.age = age;
return this;
}
public User build() {
return new User(name, age);
}
}
}
사용 예제:
User user = User.builder().name("Alice").age(30).build();
⚡ 5. Lombok이 적용되는 시점 (컴파일 과정)
1️⃣ 개발자가 Lombok 어노테이션을 추가 (@Getter, @Setter, @Builder 등)
2️⃣ Java 컴파일러가 Lombok의 어노테이션 프로세서를 실행
3️⃣ Lombok이 AST(Abstract Syntax Tree)를 수정하여 자동으로 메서드를 추가
4️⃣ 바뀐 코드가 최종 바이트코드로 변환되어 실행 가능
📌 중요한 점은 Lombok이 “소스 코드 자체”를 수정하는 것이 아니라, “컴파일 과정에서 바이트코드를 수정”하는 방식으로 동작한다는 것!
⚡ 6. Lombok 설정 및 사용 방법
✅ 1) Lombok 라이브러리 추가 (Gradle & Maven)
// build.gradle
dependencies {
implementation 'org.projectlombok:lombok:1.18.30'
annotationProcessor 'org.projectlombok:lombok:1.18.30'
}
<!-- Maven -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
📌 주의: IDE(예: IntelliJ, Eclipse)에서 Lombok 플러그인을 설치해야 함.
⚡ 7. Lombok을 사용하면 안 되는 경우
상황 | 대안 |
리플렉션(Reflection) 사용 시 | 명시적으로 Getter/Setter 선언 |
코드 가독성이 중요한 경우 | 직접 메서드 작성 |
JPA(Entity) 사용 시 | @Setter 사용 주의 (불변성 유지) |
⚡ 8. 결론
✅ Lombok은 컴파일 타임에 어노테이션 프로세서를 사용하여 바이트코드를 수정하는 방식으로 동작
✅ 반복적인 Getter, Setter, 생성자, toString() 등을 자동 생성하여 코드 간결화
✅ 빌더 패턴, 생성자 자동 생성 기능을 활용하여 가독성 및 유지보수성 향상
✅ 단, JPA 등에서는 무분별한 Setter 사용을 지양해야 함
🚀 Lombok을 잘 활용하면 개발 생산성을 크게 높일 수 있다
출처 : ChatGPT
'BE > Java' 카테고리의 다른 글
[Java] StringTokenizer (0) | 2025.03.16 |
---|---|
[Java] 네이버 포매터(Naver Formatter) (0) | 2025.03.11 |
[Java] Java Collections Framework (0) | 2025.03.06 |
[Java] Mockito (0) | 2025.01.21 |
[Java] Servlet (2) | 2025.01.10 |