Study/Java&Spring

어노테이션(Annotation)

kdhoooon 2021. 6. 28. 15:35

어노테이션(Annotation)이란?


  • 사전적 의미로는 주석이라는 뜻이다.
  • 코드 사이에 주석처럼 쓰여서 특별한 의미, 기능을 수행하도록 하는 기술이다.
  • 컴파일, 런타임 시에 해석이 될 수 있다.

 

어노테이션을 적용할 때는 어노테이션이 어디에 적용되며 언제까지 어노테이션 소스가 유지될 것인지를 설정하여야 하는데 소스코드에는 다음과 같이 어노테이션을 정의해 주면 된다.

@Target({ElementType.[적용대상]})
@Retention(RetentionPolicy.[정보유지되는 대상])
public @interface [어노테이션명]{
	public 타입 elementName() [default 값]
    ...
}

 

@Target에는 어떠한 값(ex : 클래스, 필드, 메서드 ...)에 어노테이션을 적용할 것이지 나타낼 수 있는데 넣을 수 있는 값은 다음 표와 같다.

ElementType 열거 상수 적용대상
TYPE 클래스, 인터페이스, 열거 타입
ANNOTATION_TYPE 어노테이션
FIELD 필드
CONSTRUCTOR 생성자
METHOD 메소드
LOCAL_VARIABLE 로컬 변수
PACKAGE 패키지

 

@Retention에는 어노테이션 값들을 언제까지 유지할 것인지 값을 입력하는데 각 값이 가지는 의미는 다음 표와 같다. 보통 어노테이션은 Runtime시에 많이 사용하므로 대부분의 어노테이션의 Retention 값은 RUNTIME으로 되어있다.

RetentionPolicy 열거상수 설명
SOURCE 소스상에서만 어노테이션 정보를 유지한다. 소스 코드를 분석할 떄만 의미가 있으면, 바이트 코드 파일에는 정보가 남지 않는다.
CLASS 바이트 코드 파일까지 어노테이션 정보를 유지한다. 하지만 리플렉션을 이용해서 어노테이션 정보를 얻을 수는 없다.
RUNTIME 바이트 코드 파일까지 어노테이션 정보를 유지하면서 리플렉션을 이용해서 런타임에 어노테이션 정보를 얻을 수 있다.

 

 

Spring에서 사용해본 어노테이션 종류


@Configuration

  • Spring 설정 클래스 라는 의미를 가지를 클래스
  • IoC 와 DI를 적용하게 된다.

 

@Bean

  • AnnotationConfigApplicationContext이 Config를 읽어들여 IoC, DI 를 적용할 때 읽어들이는 클래스

 

@ComponentScan("패키지 위치")

  • 어노테이션이 붙어있는 모든 것을 찾아서 등록해주는 클래스
  • 컨트롤러, 서비스, 리포지토리, 컴포넌트 등 어노테이션 클래스를 읽어들인다.