스프링 부트를 사용하면 애노테이션에 쉽게 접근할 수 있다.
처음 스프링 부트를 활용하면서 이건 내부적으로 어떤 코드가 작성되어 있는 걸까? 라는 고민을 해봤다.
하지만 일단 기술 습득에 앞세워 자세히 공부를 하지 못했다.
한번 애노테이션에 대해 알아보자.
애노테이션은 자바와 같은 프로그래밍 언어에서 메타데이터를 제공하는 특별한 형태의 구성 요소이다. 주로 클래스, 메서드, 변수 등에 부가 정보를 추가하기 위해 사용된다.
메타데이터를 제공한다. 메타데이터는 데이터에 대한 데이터를 의미하는 말이다. 다른 데이터를 설명하거나 정보를 제공하는 데이터이다.
이러한 메타데이터에는 원본 데이터의 특성, 구조, 형식, 생성 시간, 소유자 등과 같은 정보를 포함하고 있다.
컴파일러나 런타임에서 특정 행동을 수행하기 위한 지침 역할을 하며, 코드의 가독성을 높이고, 프레임워크와의 통합을 쉽게 한다. 예를 들어, 스프링 프레임워크에서는 @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();
}
위에서 만든 애노테이션을 사용해보자.
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를 참고하여 작성되었습니다."