JAVA

[JAVA] Lombok 커스텀 애너테이션(어노테이션) 생성 및 활용

인생아 2024. 10. 31. 17:25
반응형

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를 사용하면 유틸리티 클래스에서 불필요한 인스턴스화를 막아 메모리와 성능을 최적화할 수 있습니다.

참고사이트

반응형