Meta Annotation

초코칩·2023년 4월 9일
1

spring

목록 보기
3/10
post-thumbnail

Meta Annoation

Meta annotation은 어노테이션을 정의하고 그 기능을 명시하는 것으로, 어노테이션의 특성에 대한 정보를 제공합니다.

Java와 같은 몇몇 언어에서는 어노테이션을 사용하여 소스 코드에 메타데이터(metadata)를 추가할 수 있습니다. 메타데이터는 프로그램이 실행될 때 사용되는 정보로서, 어노테이션을 사용하여 클래스, 메서드 또는 변수 등에 대한 추가 정보를 제공할 수 있습니다.

Meta annotation은 어노테이션을 정의하고 그 기능을 명시하는 것으로, 어노테이션의 특성에 대한 정보를 제공합니다. 예를 들어, @Retention, @Target, @Inherited 등은 Java에서 기본적으로 제공되는 메타 어노테이션입니다.

@Target

어노테이션의 적용 대상(@Target)을 지정할 때
어노테이션을 적용할 수 있는 대상(클래스, 메서드, 필드 등)을 지정하기 위해 사용됩니다.

@Retention

어노테이션의 유효 기간(@Retention)을 지정할 때
어노테이션의 적용 기간(소스 코드, 클래스 파일, 런타임)을 지정하기 위해 사용됩니다.

@Inherited

어노테이션을 상속 가능하게 할 때(@Inherited)
부모 클래스에서 선언된 어노테이션을 자식 클래스에서도 상속받을 수 있도록 지정하기 위해 사용됩니다.

Annotation도 자바 코드로 생성 되었기에 Annotation 코드 위에 Annotation을 붙일 수 있는 것입니다.

Why?

그럼 왜 사용하는 걸까요?

가령 @Component로 Bean이 등록될때, Object가 어떠한 종류인지 구체적으로 명시하고 싶은 경우가 있습니다. Web, Service 계층이나 비즈니즈 로직을 표현하고 싶을 경우 말이죠. 이럴 경우, Meta Annotation으로 명시할 수 있습니다. 흔히, Spring MVC에서 사용하는 @RestController가 대표적입니다.

서비스의 규모가 거대해지면 Bean이 많아지고, 관리의 용이성 측면

Example

Web Service를 구성할 때 많이 사용하는 @RestController를 통해 쉽게 이해가 가능합니다.

@RestController

IntelliJ에서 @RestController를 확인하면 아래와 같은 Annotation이 포함됩니다.

눈의 띄는 것은 @ResponseBody, @Controller가 포함됩니다.

즉, @RestController@ResponseBody, @Controller를 Annotation으로 가지는 Meta Annoation입니다.

@Controller

이번에는 @Controller를 보겠습니다. @Controller에서는 @Component를 Annotation으로 가지는 Meta Annoation인 것을 알 수 있습니다.

따라서 @RestController@ResponseBody(API 응답을 Body에 보내기 위한 Annotation)과 @Controller(Controller 계층을 표현하기 위한 Meta Annoation)을 Annatation으로 가지는 Meta Annoation이고,

@Controller@Component(Spring Container에 Bean으로 등록하는 Annotation)를 Annotation으로 가지는 Meta Annoation인 것입니다.

그림으로 정리하면 다음과 같은 관계를 가지는 것으로 정리할 수 있습니다.

이러한 메타 Annatation을 통해 Spring에서는 ComponentScan이 가능해 동일 또는 하위 패키지를 전부 찾아 @Component가 붙어 있는 클래스를 Bean으로 등록하게 되는 것입니다.

profile
초코칩처럼 달콤한 코드를 짜자

0개의 댓글