어노테이션이란?
- 소스 코드에 추가적인 정보를 제공하는 메타데이터.
- 비즈니스 로직에는 직접적인 영향을 주지 않음.
- 클래스, 메서드, 변수, 인자 등에 추가 가능하며, 컴파일 또는 실행 시 특정 처리를 수행하도록 도움.
어노테이션의 역할
- 컴파일 시 정보 전달 (예: @Override → 오버라이딩 여부 확인)
- 빌드 툴에서 코드 자동 생성 시 사용 (예: Lombok의 @Getter, @Setter)
- 런타임 시 특정 기능을 수행하는 정보 전달 (예: @Autowired, @Controller, @Service)
어노테이션의 동작 방식
- 단순히 @를 붙인다고 동작하는 것이 아니라, 어노테이션을 처리하는 프로그램(Spring 등)이 리플렉션을 통해 해당 어노테이션을 해석하고 실행.
- 어노테이션 자체는 정보 전달용 표식이며, 이를 처리하는 프로그램이 동작을 결정.
어노테이션의 종류
1. 기본 제공(Built-in) 어노테이션
- 자바에서 기본 제공하는 어노테이션
- @Override → 부모 클래스의 메서드를 재정의할 때 사용
- @Deprecated → 사용을 권장하지 않는 메서드 표시
2. 메타 어노테이션(Meta Annotation)
- 다른 어노테이션을 정의할 때 사용하는 어노테이션
- @Target → 어노테이션을 적용할 대상을 지정 (예: 클래스, 필드, 메서드 등)
- @Retention → 어노테이션의 유지 기간을 지정 (예: 컴파일 시, 런타임 등)
- @Documented → 해당 어노테이션을 javadoc에 포함시킴
- @Inherited → 부모 클래스의 어노테이션을 자식 클래스에서 상속받게 함
@Target 어노테이션 - 적용 가능한 위치
대상 타입의미
ANNOTATION_TYPE |
Annotation |
CONSTRUCTOR |
생성자 |
FIELD |
필드 (멤버변수, enum 상수) |
LOCAL_VARIABLE |
지역변수 |
METHOD |
메서드 |
PACKAGE |
패키지 |
PARAMETER |
매개변수 |
TYPE |
타입(클래스, 인터페이스, enum) |
TYPE_PARAMETER |
타입 매개변수(JDK 1.8) |
USE |
타입이 사용되는 모든 곳(JDK 1.8) |
@Retention 어노테이션 - 어노테이션의 유지 기간 설정
대상 타입 |
의미 |
SOURCE |
컴파일 전까지만 유효하며, 컴파일 이후 사라짐(ex. Override). |
CLASS |
컴파일러가 클래스를 참조할 때까지 유효 (기본값)(ex. @Getter @Setter). |
RUNTIME |
리플렉션을 사용하여 컴파일 이후에도 JVM에 의해 계속 참조됨(ex. @Controller, @Service 외 대부분). |
커스텀 어노테이션 예시
- 어노테이션은 인터페이스의 일종이며 @interface 키워드로 선언.
- 속성을 가질 수 있으며, 속성은 타입과 이름으로 구성됨.
커스텀 어노테이션 예제
public @interface MyCustomAnnotation {
String value();
String name();
int count() default 1;
}
사용 예제
@MyCustomAnnotation(value = "값", name = "이름")
public class MyClass {
// 클래스 내용
}
- value 속성은 단독으로 사용하면 속성명을 생략 가능
- 예: @GetMapping("/admin/")
스프링에서 어노테이션이 동작하는 원리
- 스프링이 리플렉션(Reflection)을 사용하여 특정 어노테이션이 붙은 클래스를 탐색.
- 예: @Controller가 붙은 모든 클래스를 찾아서 컨트롤러로 등록.
리플렉션(Reflection)이란?
- 클래스와 메서드 정보를 동적으로 가져올 수 있는 기술.
- 컴파일 타임이 아니라 런타임에서 특정 클래스의 정보를 조회하고 실행 가능.
- 이를 통해 Spring이 어노테이션을 분석하고 동작을 결정.
어노테이션의 핵심
- 어노테이션 자체로는 동작하지 않고, 단순히 라벨 역할을 수행.
- 어노테이션을 처리하는 프레임워크(Spring 등)가 리플렉션을 통해 해당 어노테이션을 찾아 기능을 수행.
- 즉, 어노테이션은 정보 전달 역할을 하며, 이를 해석하는 프로그램이 동작을 결정.