Annotation과 metadata

블랑·2023년 3월 19일
0

스프링 프레임워크를 공부하다보면 빠질 수 없는 지식이 Annotation이다.

기존에는 단순히 외우고 넘어갔었지만, 헷갈리는 부분이 많아 이를 따로 정리해보았다.

메타데이터와 애노테이션의 정의

메타데이터(Metadata)란 데이터에 대한 정보, 즉 데이터를 설명하는 데이터를 의미한다.

예를 들어, 사진 파일의 메타데이터는 사진 파일의 크기, 포맷, 해상도, 촬영 일시 등의 정보 등이 있을 것이다.

이러한 메타데이터를 정의하고 활용하는 기능이 애노테이션(Annotation)이다.
애노테이션은 주로 소스 코드에 메타데이터를 추가하고, 이를 컴파일러나 런타임 시점에 활용할 수 있다.

예시

예를 들어, 스프링 프레임워크에서는 컨트롤러에 @Controller 애노테이션을 추가하여 해당 클래스가 컨트롤러임을 명시할 수 있다. (동일한 인터페이스가 있긴 하지만, 애노테이션임을 상기하자.)
이렇게 메타데이터를 추가함으로써 스프링은 런타임 시점에 이 컨트롤러를 스캔하고, 요청에 맞는 핸들러를 매핑할 수 있게 된다.

자바에서는 컴파일러와 런타임 시점에 메타데이터를 활용한다.

컴파일러는 소스 코드를 바이트 코드로 변환할 때 메타데이터를 활용하여 코드를 생성한다. 예를 들어, 자바에서는 애노테이션을 활용하여 컴파일 시점에 코드를 생성하거나 컴파일 과정에서 코드를 검증하는 등의 작업을 수행할 수 있다.

애노테이션을 사용하면 코드의 가독성과 유지보수성이 좋아지는 등의 장점이 있으며, 애노테이션을 통해 개발자가 직접 도메인 특화 언어(Domain Specific Language, DSL)를 만들어 사용할수도 있다.

애노테이션을 통해 정의된 메타데이터는 리플렉션(Reflection)을 사용하여 런타임 시점에 활용할 수 있게 된다.

profile
안녕하세요.

0개의 댓글