애노테이션이란

viroovr·2024년 10월 20일

스프링 부트를 사용하면 애노테이션에 쉽게 접근할 수 있다.
처음 스프링 부트를 활용하면서 이건 내부적으로 어떤 코드가 작성되어 있는 걸까? 라는 고민을 해봤다.
하지만 일단 기술 습득에 앞세워 자세히 공부를 하지 못했다.

한번 애노테이션에 대해 알아보자.

애노테이션은 자바와 같은 프로그래밍 언어에서 메타데이터를 제공하는 특별한 형태의 구성 요소이다. 주로 클래스, 메서드, 변수 등에 부가 정보를 추가하기 위해 사용된다.

메타데이터를 제공한다. 메타데이터는 데이터에 대한 데이터를 의미하는 말이다. 다른 데이터를 설명하거나 정보를 제공하는 데이터이다.
이러한 메타데이터에는 원본 데이터의 특성, 구조, 형식, 생성 시간, 소유자 등과 같은 정보를 포함하고 있다.

컴파일러나 런타임에서 특정 행동을 수행하기 위한 지침 역할을 하며, 코드의 가독성을 높이고, 프레임워크와의 통합을 쉽게 한다. 예를 들어, 스프링 프레임워크에서는 @Autowired, @Controller, @Service 등의 애노테이션을 사용하여 의존성 주입이나 컴포넌트 스캔을 간편하게 설정할 수 있다.

이러한 설명들은 스프링 부트를 사용하며 예상했던 기능들이다. 확실히 코드의 가독성이 높고 기능들을 쉽게 분류할 수 있도록 도와 사용하기가 편했다.
사용하기 편한 만큼 스프링 부트에 쉽게 접근하고 자주 사용하게 되는 게 아닐까

한번 애노테이션을 직접 만드는 실습을 진행해보자.

메소드에 대한 설명을 추가하는 애노테이션을 만들어보자.

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MethodDescription {
	String value();
}
  • @Retention(RetentionPolicy.RUNTIME): 이 애노테이션이 언제까지 유지될 지 지정한다. RUNTIME으로 설정하면 애노테이션 정보가 런타임 시에도 유지되어, 리플렉션을 통해 접근할 수 있게 된다.
  • @Target(ElementType.METHOD): 이 애노테이션이 적용될 수 있는 대상을 지정한다. ElementType.METHOD로 지정하면 이 애노테이션은 메서드에만 적용될 수 있다.
  • @interface는 자바에서 애노테이션을 정의할 때 사용하는 키워드이다.
  • String value()로 이 애노테이션은 하나의 문자열 속성을 가진다.

위에서 만든 애노테이션을 사용해보자.

public class Example {
	@MethodDescription("이 메소드는 두 수를 더합니다.")
    public int add(int a, int b) {
    	return a + b;
    }
    
    @MethodDescription("이 메소드는 두 수를 곱합니다.")
    public int multiply(int a, int b) {
    	return a*b;
    }
}

애노테이션의 정보를 읽기 위해 리플렉션을 사용할 수 있다.

import java.lang.reflect.method;

public class AnnotationTest {
	public static void main(String[] args) {
    	Method[] methods = Example.class.getDeclaredMethods();
        
        for(Method method: methods) {
        	if(method.isAnnotationPresent(MethodDescription.class)) {
            	MethodDescription description = method.getAnnotation(MethodDescription.class);
                System.out.println("메소드 이름: " + method.getName());
                System.out.println("설명: " + description.value());
            }
        }
    }
}

위 코드를 실행하면 다음과 같이 출력된다.

메소드 이름: add
설명: 이 메소드는 두 수를 더합니다.
메소드 이름: multiply
설명: 이 메소드는 두 수를 곱합니다.

이 실습을 통해 애노테이션은 주로 코드에 메타데이터를 추가하는데 사용되며, 리플렉션을 통해 이를 읽고 활용할 수 있다.

"본 포스팅은 OpenAI의 Chatgpt를 참고하여 작성되었습니다."

profile
성장하는 개발자

0개의 댓글