Lombok

Yuno·2024년 8월 11일

JavaSpring

목록 보기
10/16

✏️Lombok 이란?

Java 코드에서 반복적인 작업을 줄이기 위해 사용되는 라이브러리로, 보일러플레이트 코드를 줄이고 코드 가독성을 향상시킬 수 있음.
Lombok은 컴파일 타임에 어노테이션을 기반으로 코드 생성 작업을 수행하여 개발자가 더 깔끔하고 유지보수가 쉬운 코드를 작성할 수 있도록 도와줌


📌Lombok 주요 어노테이션

1. @Getter 와 @Setter

  • @Getter : 클래스의 모든 필드에 대해 getter 메서드를 자동으로 생성
  • @Setter : 클래스의 모든 필드에 대해 setter 메서드를 자동으로 생성
@Getter
@Setter
public class Person {
	private String name;
    private int age;
}

해당 어노테이션으로 Person 클래스는 getName() setName() getAge() setAge() 메서드를 자동으로 생성


2. @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor

  • @NoArgsConstructor : 기본 생성자를 자동으로 생성
  • @AllArgsConstructor : 모든 필드를 매개변수로 받는 생성자를 자동으로 생성
  • @RequiredArgsConstructor : final 필드와 @NonNull 로 선언된 필드를 매개변수로 받는 생성자를 자동으로 생성
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
public class Person {
	private final String name;
    private int age;
}

해당 어노테이션으로 Person 클래스는 기본 생성자, 모든 필드를 매개변수로 받는 생성자, 그리고 name 필드를 매개변수로 받는 생성자를 자동으로 생성


3. @Data

  • @Data : @Getter @Setter ToString @EqualsAndHashCode @RequiredArgsConstructor 를 포함하여, 데이터 클래스를 위한 모든 주요 메서드를 자동으로 생성
@Data
public class Person {
	private final String name;
    private int age;
}

해당 어노테이션으로 Person 클래스는 getter, setter, toString(), equals(), hashCode() 메서드를 자동으로 생성


4. @Builder

  • @Builder : 빌더 패턴을 사용하여 객체를 생성할 수 있는 방법을 제공하며, 클래스의 필드에 대해 유동적인 객체 생성을 지원
@Builder
public class Person {
	private String name;
    private int age;
}

해당 어노테이션으로 Person 클래스는 빌더를 사용하여 객체를 생성할 수 있는 메서드를 제공

Person person = Person.builder()
				      .name("John")
                      .age(30)
                      .build();

5. @ToString

  • ToString : toString() 메서드를 자동으로 생성하여 객체의 문자열 표현을 제공.
    필요한 필드만 포함할 수 있도록 설정할 수 있음.
@ToString(onlyExplicitlyIncluded = true)
public class Person {
	@ToString.Include
    private String name;
    private int age;
}

해당 어노테이션으로 @toString() 메서드는 name 필드만 포함된 문자열을 반환


6. @EqualsAndHashCode

  • @EqualsAndHashCode : equals()hashCode() 메서드를 자동으로 생성
    필드를 기준으로 동등성을 비교함
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class Person {
	@EqualsAndHashCode.Include
    private String name;
    private int age;
}

해당 어노테이션으로 equals()hashCode() 메서드는 name 필드를 기준으로 생성됨


7. @Slf4j

  • @Slf4j

    • private static final Logger log 이라는 필드가 자동으로 생성. 이 로거는 Slf4j의 Logger 타입이며, 클래스의 로거 인스턴스로 사용됨
    • log.info() log.debug() log.warn() log.error() 메서드를 통해 다양한 로그 레벨의 메세지를 기록할 수 있음
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class ExampleService {
	
    public void performTask() {
    	log.info("Task is starting");
        try {
        	// 예외를 던질 일부 코드 작성
            log.debug("Processing data...");
        } catch (Exception e) {
        	log.error("An error occurred", e);
        }
        log.info("Task is completed");
    }
}

해당 어노테이션으로 log 필드가 자동 생성됨.
log.info() log.debug() log.error() 메서드를 통해 로그 메세지를 기록할 수 있음


8. @UtilityClass

  • @UtilityClass : 클래스가 오직 유틸리티 메서드만 포함하도록 설정할 때 사용됨. 보통 인스턴스화할 필요 없이 메서드만 제공하는 클래스
    • final 클래스 : @UtilityClass 를 사용하면 클래스가 자동으로 final 로 선언되며, 클래스 인스턴스화를 방지함
    • 생성자 : 자동으로 private 생성자를 생성하여 외부에서 클래스 인스턴스화를 방지
    • 모든 메서드는 자동으로 static 으로 설정 됨
import lombok.experimental.UtilityClass;

@UtilityClass
public class MathUtils {
	public double square(double number) {
    	return number * number;
    }
    
    public double cube(double number) {
    	return number * number * number;
    }
}
import static com.example.utils.MathUtils.*; // class import

public class ExampleUsage {
	public void calculate() {
    	double square = square(5);
        double cube = cube(3);
        System.out.println("Square: " + square);
        System.out.println("Cube: " + cube);
    }
}

해당 어노테이션으로 MathUtils 클래스의 메서드들을 인스턴스화 하지 않고 직접 호출할 수 있으며, 코드가 더 깔끔하고 간결해짐

profile
Hello World

0개의 댓글