Java 코드에서 반복적인 작업을 줄이기 위해 사용되는 라이브러리로, 보일러플레이트 코드를 줄이고 코드 가독성을 향상시킬 수 있음.
Lombok은 컴파일 타임에 어노테이션을 기반으로 코드 생성 작업을 수행하여 개발자가 더 깔끔하고 유지보수가 쉬운 코드를 작성할 수 있도록 도와줌
@Getter
@Setter
public class Person {
private String name;
private int age;
}
해당 어노테이션으로 Person 클래스는 getName() setName() getAge() setAge() 메서드를 자동으로 생성
final 필드와 @NonNull 로 선언된 필드를 매개변수로 받는 생성자를 자동으로 생성@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
public class Person {
private final String name;
private int age;
}
해당 어노테이션으로 Person 클래스는 기본 생성자, 모든 필드를 매개변수로 받는 생성자, 그리고 name 필드를 매개변수로 받는 생성자를 자동으로 생성
@Getter @Setter ToString @EqualsAndHashCode @RequiredArgsConstructor 를 포함하여, 데이터 클래스를 위한 모든 주요 메서드를 자동으로 생성@Data
public class Person {
private final String name;
private int age;
}
해당 어노테이션으로 Person 클래스는 getter, setter, toString(), equals(), hashCode() 메서드를 자동으로 생성
@Builder
public class Person {
private String name;
private int age;
}
해당 어노테이션으로 Person 클래스는 빌더를 사용하여 객체를 생성할 수 있는 메서드를 제공
Person person = Person.builder()
.name("John")
.age(30)
.build();
toString() 메서드를 자동으로 생성하여 객체의 문자열 표현을 제공.@ToString(onlyExplicitlyIncluded = true)
public class Person {
@ToString.Include
private String name;
private int age;
}
해당 어노테이션으로 @toString() 메서드는 name 필드만 포함된 문자열을 반환
equals() 와 hashCode() 메서드를 자동으로 생성@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class Person {
@EqualsAndHashCode.Include
private String name;
private int age;
}
해당 어노테이션으로 equals() 와 hashCode() 메서드는 name 필드를 기준으로 생성됨
@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() 메서드를 통해 로그 메세지를 기록할 수 있음
@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 클래스의 메서드들을 인스턴스화 하지 않고 직접 호출할 수 있으며, 코드가 더 깔끔하고 간결해짐