Java/Spring

어노테이션(Annotation)

파란배개 2025. 2. 9. 15:33

어노테이션이란?

  • 소스 코드에 추가적인 정보를 제공하는 메타데이터.
  • 비즈니스 로직에는 직접적인 영향을 주지 않음.
  • 클래스, 메서드, 변수, 인자 등에 추가 가능하며, 컴파일 또는 실행 시 특정 처리를 수행하도록 도움.

어노테이션의 역할

  1. 컴파일 시 정보 전달 (예: @Override → 오버라이딩 여부 확인)
  2. 빌드 툴에서 코드 자동 생성 시 사용 (예: Lombok의 @Getter, @Setter)
  3. 런타임 시 특정 기능을 수행하는 정보 전달 (예: @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 등)가 리플렉션을 통해 해당 어노테이션을 찾아 기능을 수행.
  • 즉, 어노테이션은 정보 전달 역할을 하며, 이를 해석하는 프로그램이 동작을 결정.

'Java > Spring' 카테고리의 다른 글

쿠키 - SameSite 및 Domain 설정에 따른 쿠키 전달 이슈  (0) 2025.04.18
Web Server와 WAS  (1) 2025.02.16
Spring Security  (0) 2025.02.06
OSIV  (0) 2025.02.06
Servlet, Dispatcher Servlet, Servlet Container  (0) 2025.02.02