카테고리 없음
Java Annotation
뽀글뽀글 개발자
2024. 9. 23. 13:49
Annotation
어노테이션이란 주석이라는 뜻으로 자바에서 코드에 "이 어노테이션이 붙은 코드는 어떤식으로 사용된다." 와 같은 메타데이터를 추가하기 위해 사용된다.
하지만 어노테이션 자체만으로는 아무런 기능이 없는 주석이기 때문에 어노테이션에 대한 처리 로직이 필요하다.
어노테이션 생성 방법
아래는 @Bean 어노테이션의 구조로 @Target, @Retetion을 지정해주고, @Interface로 선언한다.
아래 필드들은 어노테이션 파라미터로 다음과 같이 사용할 수 있다. ex) @Bean(name="testBean")
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Bean {
@AliasFor("name")
String[] value() default {};
@AliasFor("value")
String[] name() default {};
@Deprecated
Autowire autowire() default Autowire.NO;
boolean autowireCandidate() default true;
String initMethod() default "";
String destroyMethod() default AbstractBeanDefinition.INFER_METHOD;
}
@Target
@Target을 통해서 어노테이션이 적용될 수 있는 요소의 종류를 지정한다.
아래와 같이 선언되면 메서드와 필드 변수에 어노테이션을 붙일 수 있다는 뜻이다.
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention
@Retention은 어노테이션이 유지되는 기간을 지정하며, RetentionPolicy는 아래 3가지가 있다.
- SOURCE: 소스 코드에서만 유지. 컴파일 시 제거됨.
- @Getter, @Setter의 경우 컴파일 후 클래스 파일을 생성할 때까지만 사용된다.
- CLASS: 컴파일된 클래스 파일까지 유지. 런타임 시 제거됨. (Default)
- @NonNull의 경우 클래스 파일 이 실행되어 JVM Class Loader에 올라가면 사라진다.
- RUNTIME: 런타임까지 유지. 리플렉션을 통해 정보를 읽을 수 있음.
- @Autowired, @Component의 경우 애플리케이션 실행 중에 Reflection을 통해 정보를 읽고 처리할 수 있다.
- 런타임의 경우 프로그램 실행 중에 어노테이션이 붙은 클래스의 정보를 가져올 수 있어야하기 때문에 Reflection API와 함께 사용된다.