T_era

Spring 어노테이션 정리 본문

Programing/Spring

Spring 어노테이션 정리

블스뜸 2025. 5. 6. 15:33

@Component

  • Spring Bean으로 등록하는 역할을 수행한다.
  • Spring Bean은 애플리케이션의 구성 요소를 정의하는 객체이다.
  • @Indexed 어노테이션과 함께 사용될 경우, 컴포넌트 스캔 시 Spring Bean으로 더욱 빠르게 등록되도록 돕는다.
  • Spring Bean 및 컴포넌트 스캔 관련 내용은 숙련 주차 강의에서 상세히 다룰 예정이다.

@Target

  • 하위 어노테이션이 적용될 수 있는 범위를 설정하는 메타 어노테이션이다.
  • java.lang.annotation.ElementType Enum 속성을 사용하여 적용 대상을 지정한다.

ElementType Enum 속성

  • TYPE: 클래스, 인터페이스, 어노테이션 타입, 열거형에 적용 가능하다.
  • FIELD: 필드 (클래스 변수, 인스턴스 변수)에 적용 가능하다.
  • METHOD: 메서드에 적용 가능하다.
  • PARAMETER: 메서드 파라미터에 적용 가능하다.
  • CONSTRUCTOR: 생성자에 적용 가능하다.
  • LOCAL_VARIABLE: 지역 변수에 적용 가능하다.
  • ANNOTATION_TYPE: 어노테이션 타입 선언 (메타 어노테이션 정의 시 사용)에 적용 가능하다.
  • PACKAGE: 패키지 선언에 적용 가능하다.
  • TYPE_PARAMETER: 타입 파라미터 (제네릭 타입 선언 시 <T>)에 적용 가능하다.
  • TYPE_USE: 타입이 사용되는 모든 곳 (Java 8 이상)에 적용 가능하다.

@Retention

  • 하위 어노테이션이 유지되는 기간을 결정하는 메타 어노테이션이다.
  • java.lang.annotation.RetentionPolicy Enum 속성을 사용하여 유지 정책을 지정한다.

RetentionPolicy Enum 속성

  • SOURCE: 소스 코드에서만 유지되며, 컴파일 시 제거된다.
  • CLASS: 컴파일된 클래스 파일에 저장되지만, 런타임 시 JVM이 읽지 않는다 (기본값).
  • RUNTIME: 클래스 파일에 저장되고, 런타임 시 JVM이 읽어 런타임 코드에 영향을 준다.

@Documented

  • Javadoc 등의 문서화 도구에 의해 문서화되어야 함을 나타내는 메타 어노테이션이다.

@Controller 다시보기

  • @Target(ElementType.TYPE): 클래스, 인터페이스, 어노테이션, 열거형, 레코드 (Java 16)에 적용 가능하다.
  • @Retention(RetentionPolicy.RUNTIME): 런타임 시까지 유지된다.
  • @Documented: 문서화 대상이다.
  • @Component: Spring Bean으로 등록되며 (싱글톤 관리), 하위 어노테이션이다.
  • @AliasFor(annotation = Component.class): value 속성은 @Component의 value 속성과 동일한 의미를 가진다.

@RestController 다시보기

  • @Target(ElementType.TYPE): 클래스, 인터페이스, 어노테이션, 열거형, 레코드 (Java 16)에 적용 가능하다.
  • @Retention(RetentionPolicy.RUNTIME): 런타임 시까지 유지된다.
  • @Documented: 문서화 대상이다.
  • @Controller와 @ResponseBody가 결합된 어노테이션이다.
  • @Controller 어노테이션을 포함하며, 각 메서드에 @ResponseBody를 명시하지 않아도 HTTP 응답 본문에 직접 데이터를 반환한다.
  • @AliasFor(annotation = Controller.class): value 속성은 @Controller의 value 속성과 동일한 의미를 가진다.