몽상실현개발주의

Lombok in Spring Framework 본문

Dev

Lombok in Spring Framework

migrationArc 2024. 5. 6. 15:00

Lombok?

Lombok은 자바 개발을 더 편리하게 하기 위한 라이브러리로, 반복적으로 작성해야 하는 코드를 줄여주는 어노테이션 기반의 도구입니다. Spring 프레임워크와 함께 사용될 때, Lombok은 개발자가 보일러플레이트 코드를 줄이고, 더 깔끔하고 관리하기 쉬운 코드를 작성할 수 있게 돕습니다.

  • @Getter / @Setter: 필드에 대한 getter 및 setter 메소드 자동 생성
  • @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor: 생성자 자동 생성
  • @Data: 클래스에 대한 getter, setter, toString, equals, hashCode 메소드를 한 번에 생성
  • @Builder: 빌더 패턴 구현 자동화
  • @Slf4j: 로깅을 위한 Logger 필드 자동 생성

 

* 보일러플레이트 코드?
보일러플레이트 코드란 변경 없이 반복적으로 사용되는 코드 조각을 의미합니다. Lombok은 이러한 코드를 줄여줌으로써 개발자가 보다 중요한 로직에 집중할 수 있게 도와줍니다.

 


 

Lombok의 주요 기능과 예시

1. @Getter / @Setter

  • 클래스 필드에 대한 getter와 setter 메소드를 자동으로 생성합니다. 이 어노테이션을 사용하면 수동으로 각 필드에 대한 접근자(accessor) 및 변경자(mutator) 메소드를 작성할 필요가 없어집니다.

기존 코드:

public class User {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Lombok 사용 코드:

import lombok.Getter;
import lombok.Setter;

public class User {
    @Getter @Setter
    private String name;
}

 

2. @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor

@NoArgsConstructor

  • 이 어노테이션은 파라미터가 없는 기본 생성자를 자동으로 생성합니다. 특히 JPA(Java Persistence API)에서 엔티티 클래스에 기본 생성자를 요구할 때 유용하게 사용됩니다.
  • 클래스에 명시적으로 생성자를 정의하지 않아도, 컴파일 시 Lombok이 기본 생성자를 생성해줍니다.
  • final 필드가 있거나 @NonNull 어노테이션이 붙은 필드가 있는 경우, Lombok은 이 어노테이션을 사용할 수 없습니다.

@RequiredArgsConstructor

  • 이 어노테이션은 초기화가 필요한 필드(final 또는 @NonNull 어노테이션이 붙은 필드)만을 매개변수로 받는 생성자를 자동으로 생성합니다. 이를 통해 필수적으로 초기화가 필요한 필드를 보장할 수 있습니다.
  • 필수 필드만 초기화하는 생성자를 생성하므로, 객체의 일관성과 불변성을 유지하는 데 도움을 줍니다.
  • 생성자는 클래스 내의 final 필드와 @NonNull 어노테이션이 붙은 필드에 대해서만 매개변수를 갖습니다.

@AllArgsConstructor

  • 이 어노테이션은 클래스의 모든 필드를 매개변수로 받는 생성자를 자동으로 생성합니다. 클래스에 있는 모든 필드가 생성자의 인자로 사용되어 모든 속성을 초기화할 수 있게 해 줍니다.
  • 모든 필드가 생성자의 인자로 제공되기 때문에, 객체 생성 시 모든 필드를 명시적으로 초기화해야 합니다.
  • 특히 많은 수의 필드를 갖는 복잡한 객체를 초기화할 때 코드의 간결성을 유지할 수 있습니다.

기존 코드:

public class User {
    private String name;
    private String email;

    public User() {}

    public User(String name, String email) {
        this.name = name;
        this.email = email;
    }
}

Lombok 사용 코드:

import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String name;
    private String email;
}

 

3. @Data

  • @Data 어노테이션은 @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode를 모두 포함합니다.
  • 클래스의 모든 필드에 대한 보일러플레이트 코드를 한 줄의 어노테이션으로 처리할 수 있습니다.

기존 코드:

public class User {
    private String name;
    private String email;

    public User() {}

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{name='" + name + "', email='" + email + "'}";
    }
}

Lombok 사용 코드:

import lombok.Data;

@Data
public class User {
    private String name;
    private String email;
}

 

4. @Builder

  • 빌더 패턴을 적용하여 객체 생성 시 안전하고, 명확하게 필요한 속성을 설정할 수 있게 도와줍니다. 특히 많은 필드를 가진 객체를 생성할 때 유용합니다.

기존 코드:

public class User {
    private String name;
    private String email;
    private int age;

    public User(String name, String email, int age) {
        this.name = name;
        this.email = email;
        this.age = age;
    }
}

// 객체 생성
User user = new User("John Doe", "john.doe@example.com", 30);

Lombok 사용 코드:

import lombok.Builder;

@Builder
public class User {
    private String name;
    private String email;
    private int age;
}

// 객체 생성
User user = User.builder()
                .name("John Doe")
                .email("john.doe@example.com")
                .age(30)
                .build();

 

5. @Slf4j

  • SLF4J 로깅 파사드를 위한 로그 객체를 자동으로 생성합니다. 이 어노테이션을 사용하면 별도의 로거 객체를 선언하지 않고도 로깅을 할 수 있습니다.

기존 코드:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class UserController {
    private static final Logger logger = LoggerFactory.getLogger(UserController.class);

    public void logUser(User user) {
        logger.info("User: {}", user);
    }
}

Lombok 사용 코드:

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class UserController {
    public void logUser(User user) {
        log.info("User: {}", user);
    }
}
Comments