Lombok 플러그인은 Java의 기본적인 애너테이션 기능을 확장하여 개발자에게 더 많은 코드 자동화 옵션을 제공합니다. 기본 제공 애너테이션 외에도, 커스텀 애너테이션을 생성하여 코드의 반복성을 줄이고 코드 가독성을 높일 수 있습니다. 이 글에서는 커스텀 애너테이션 구현 및 활용 방법과, 유틸리티 메서드 모음을 통해 반복 코드를 줄이는 방식에 대해 설명하겠습니다.
Lombok 플러그인을 통한 커스텀 애너테이션 구현
Lombok을 이용해 자주 사용하는 기능들을 커스텀 애너테이션으로 묶어 사용할 수 있습니다. Lombok의 @ExtensionMethod를 활용하면 특정 메서드를 자동으로 적용하거나, @UtilityClass를 통해 정적 메서드만 가진 클래스를 쉽게 생성할 수 있습니다. 아래는 커스텀 애너테이션을 만들어 중복 코드를 줄이는 예시입니다.
커스텀 애너테이션 생성 예제
예를 들어, 로그 로직이 필요한 클래스에 반복적으로 @Slf4j 애너테이션을 추가할 필요 없이, 커스텀 애너테이션을 만들어 한번에 적용할 수 있습니다.
import lombok.extern.slf4j.Slf4j;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Slf4j // Lombok의 Slf4j 애너테이션을 결합
public @interface Loggable {
// 추가 설정이 필요한 경우 이곳에 선언
}
이렇게 만든 @Loggable 애너테이션을 클래스에 붙이면 @Slf4j 기능을 자동으로 상속합니다. 이제 이 커스텀 애너테이션을 다른 클래스에 활용하여 코드 간소화를 할 수 있습니다.
@Loggable
public class ExampleService {
public void doSomething() {
log.info("Logging with @Loggable annotation!");
}
}
위 예제처럼 @Loggable을 사용하여 Slf4j 로그 기능을 추가할 수 있습니다. 커스텀 애너테이션을 통해 로깅 설정을 중앙화하고 코드의 반복을 줄이는 효과를 얻을 수 있습니다.
반복되는 코드를 줄이기 위한 애너테이션 설계
커스텀 애너테이션을 사용하면 반복적으로 사용하는 유틸리티 메서드를 쉽게 호출할 수 있어, 코드를 더 간결하게 작성할 수 있습니다. 예를 들어, Null 체크나 빈 문자열 체크와 같은 공통 메서드를 커스텀 애너테이션으로 설정하여 자동으로 실행되도록 할 수 있습니다.
import lombok.experimental.ExtensionMethod;
@ExtensionMethod({StringUtils.class})
public class UserService {
public void validateUserInput(String input) {
if (input.isBlank()) {
System.out.println("Input is empty!");
} else {
System.out.println("Input received: " + input);
}
}
}
class StringUtils {
public static boolean isBlank(String str) {
return str == null || str.trim().isEmpty();
}
}
위 예제에서는 @ExtensionMethod 애너테이션을 사용하여 StringUtils 클래스의 메서드를 마치 String 클래스의 메서드처럼 사용할 수 있게 만들었습니다. isBlank 메서드는 Lombok이 자동으로 확장하여, 코드에서 직접 유틸리티 메서드를 호출하지 않고도 확장 메서드처럼 활용할 수 있게 됩니다.
Lombok과 함께 자주 쓰이는 유틸리티 메서드 모음
Lombok과 커스텀 애너테이션을 조합하여 자주 사용하는 유틸리티 메서드를 함께 관리할 수도 있습니다. 대표적으로 @UtilityClass를 사용하면, 정적 메서드로만 이루어진 유틸리티 클래스를 쉽게 작성할 수 있습니다.
@UtilityClass 예제
import lombok.experimental.UtilityClass;
@UtilityClass
public class MathUtils {
public double add(double a, double b) {
return a + b;
}
public double multiply(double a, double b) {
return a * b;
}
}
public class CalculationService {
public static void main(String[] args) {
double sum = MathUtils.add(5, 10);
double product = MathUtils.multiply(5, 10);
System.out.println("Sum: " + sum);
System.out.println("Product: " + product);
}
}
@UtilityClass를 사용하면 MathUtils 클래스의 모든 메서드는 정적 메서드로 변환되며, MathUtils 객체를 생성하지 않고도 정적 메서드처럼 호출할 수 있습니다. 이처럼 @UtilityClass를 사용하면 유틸리티 클래스에서 불필요한 인스턴스화를 막아 메모리와 성능을 최적화할 수 있습니다.
참고사이트
- Lombok 공식 사이트: https://projectlombok.org
'JAVA' 카테고리의 다른 글
[JAVA] Map 기본 사용법 (0) | 2024.11.02 |
---|---|
[JAVA] Map 인터페이스와 구현체 (1) | 2024.11.02 |
[JAVA] Map 개요 (0) | 2024.11.02 |
[JAVA] Lombok 성능 최적화와 메모리 관리 (0) | 2024.11.02 |
[JAVA] Lombok 조건부 애너테이션, 어노테이션 (0) | 2024.10.31 |
[JAVA] Lombok 로깅 처리 (@Slf4j, @Log 등) (0) | 2024.10.31 |
[JAVA] Lombok 애너테이션, 어노테이션 (@Value, @Singular, @SuperBuilder) (0) | 2024.10.31 |
[JAVA] Lombok Lazy Getter(lazy=true) (0) | 2024.10.31 |