개발/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 체크  
       

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 사용:
    1. Lombok 어노테이션이 적용된 클래스를 연다.
    2. Refactor > Delombok 메뉴를 선택.
    3. Delombok할 어노테이션을 선택하고 OK를 클릭.
  • Maven/Gradle에서 Delombok 사용: delombok 플러그인을 추가하여 소스 코드를 생성할 수 있다. (자세한 내용은 Lombok 공식 문서 참조)