개발/Lombok
Lombok
함수형 인간
2025. 3. 9. 03:25
Lombok (롬복)
Lombok(롬복)은 Java 개발 시 자주 사용되는 boilerplate 코드(getter, setter, constructor, toString(), equals(), hashCode() 등)를 어노테이션(@) 기반으로 자동으로 생성해주는 라이브러리.
1. Lombok의 주요 기능 및 장점
- 코드 감소: 반복적이고 지루한 코드(boilerplate code) 작성을 줄여준다.
- 가독성 향상: 어노테이션을 사용하여 코드가 간결해지므로 가독성이 좋아진다.
- 생산성 향상: 코드 작성 시간을 단축시켜 개발 생산성을 높여준다.
- 유지보수 용이: 코드가 간결해지므로 유지보수가 쉬워진다.
- IDE 지원: 대부분의 Java IDE(IntelliJ IDEA, Eclipse 등)에서 Lombok 플러그인을 제공하여 자동 완성, 문법 검사, 리팩토링 등의 기능을 지원한다.
2. Lombok 설치 및 설정
의존성 추가 (Maven/Gradle):
- Maven (pom.xml):
XML
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version> <scope>provided</scope>
</dependency>
</dependencies>
- Gradle (build.gradle):
Gradle
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.30'
annotationProcessor 'org.projectlombok:lombok:1.18.30'
}
- IDE 플러그인 설치:
- IntelliJ IDEA: File > Settings > Plugins에서 "Lombok" 검색 후 설치 및 활성화
- Eclipse: Lombok JAR 파일을 다운로드하여 실행하고, Eclipse 설치 경로를 지정하여 설치
- annotation processing 활성화
- IntelliJ IDEA: File > Settings > Build, Execution, Deployment > Compiler > Annotation Processors에서 Enable annotation processing 체크
- IntelliJ IDEA: File > Settings > Build, Execution, Deployment > Compiler > Annotation Processors에서 Enable annotation processing 체크
3. 주요 Lombok 어노테이션
어노테이션설명
@Getter | 필드에 대한 getter 메서드를 생성. |
@Setter | 필드에 대한 setter 메서드를 생성. (final 필드에는 생성되지 않음) |
@NoArgsConstructor | 파라미터가 없는 기본 생성자를 생성. |
@AllArgsConstructor | 모든 필드를 파라미터로 받는 생성자를 생성. |
@RequiredArgsConstructor | @NonNull 이나 final로 표시된 필드만을 파라미터로 받는 생성자를 생성. |
@ToString | toString() 메서드를 생성. |
@EqualsAndHashCode | equals()와 hashCode() 메서드를 생성. |
@Data | @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor를 한 번에 적용. |
@Builder | 빌더 패턴(Builder Pattern)을 생성. |
@Log, @Slf4j, @Log4j2, 등 | 로깅(logging) 관련 코드를 자동으로 생성. (SLF4J, Log4j2 등) |
@Value | 불변 클래스(immutable class)를 만드는데 사용. 모든 필드를 private final로 만들고, @Getter, @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE), @AllArgsConstructor, @EqualsAndHashCode, @ToString를 포함. |
@Cleanup | try-with-resources 처럼 리소스 해제를 자동화. (close() 메서드 자동 호출) |
@Synchronized | 메서드에 synchronized 키워드를 추가하여 스레드 동기화를 처리. |
@SneakyThrows | checked exception을 unchecked exception처럼 처리. (주의해서 사용) |
@NonNull | Null-safety를 위한 어노테이션. null이 들어오면 NullPointerException을 발생시킴. |
@With | 불변 객체의 일부 필드를 변경한 새로운 객체를 생성하기 위한 withFieldName메서드를 추가. |
4. Lombok 어노테이션 사용 예시
Java
import lombok.*;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
@EqualsAndHashCode
public class User {
private Long id;
private String username;
private String password;
private String email;
}
위 코드는 Lombok에 의해 다음과 같은 코드가 자동으로 생성되는 것과 같다.
Java
public class User {
private Long id;
private String username;
private String password;
private String email;
public User() {}
public User(Long id, String username, String password, String email) {
this.id = id;
this.username = username;
this.password = password;
this.email = email;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", email='" + email + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
if (id != null ? !id.equals(user.id) : user.id != null) return false;
if (username != null ? !username.equals(user.username) : user.username != null) return false;
if (password != null ? !password.equals(user.password) : user.password != null) return false;
return email != null ? email.equals(user.email) : user.email == null;
}
@Override
public int hashCode() {
int result = id != null ? id.hashCode() : 0;
result = 31 * result + (username != null ? username.hashCode() : 0);
result = 31 * result + (password != null ? password.hashCode() : 0);
result = 31 * result + (email != null ? email.hashCode() : 0);
return result;
}
}
5. @Builder 사용 예시
Java
import lombok.Builder;
import lombok.Getter;
@Getter
@Builder
public class Product {
private String name;
private int price;
private String description;
}
Java
// 빌더 패턴을 사용하여 객체 생성
Product product = Product.builder()
.name("Awesome Gadget")
.price(99)
.description("This is an amazing product!")
.build();
6. @Slf4j 사용 예시
Java
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class MyService {
public void doSomething() {
log.info("Doing something..."); // log 변수를 사용하여 로깅
// ...
}
}
7. Delombok (디롬복)
- Delombok은 Lombok 어노테이션을 사용하여 생성된 코드를 실제 Java 소스 코드로 변환하는 도구. Lombok이 생성하는 코드를 확인하거나, Lombok을 제거하고 싶을 때 사용.
- IntelliJ IDEA에서 Delombok 사용:
- Lombok 어노테이션이 적용된 클래스를 연다.
- Refactor > Delombok 메뉴를 선택.
- Delombok할 어노테이션을 선택하고 OK를 클릭.
- Maven/Gradle에서 Delombok 사용: delombok 플러그인을 추가하여 소스 코드를 생성할 수 있다. (자세한 내용은 Lombok 공식 문서 참조)