어노테이션이나 자바에 대해 잘 모르는 사람들도 개발을 하다보면
@Override, @SuppressWarings 등의 어노테이션에 익숙할 것이다.
어노테이션이란 Java 5에서부터 등장한 기능으로 프로그램에 추가적인 정보를 제공해주는 메타 데이터라고 볼 수 있다.
여기서 메타 데이터란 어플리케이션이 처리해야 할 데이터가 아니라 컴파일 과정과 런타임에서 코드를 어떻게 컴파일하고 처리할 것인지에 대한 정보를 말한다.
이 메타데이터를 잘 이용하면 비즈니스 로직과 분리하여 대상의 벨리데이션 체크, 값 주입, 역할 부여(기능 주입) 등을 수행할 수 있어 체계가 잡혀있는 깔끔한 코드를 작성할 수 있다.
어노테이션 구성과 동작원리 (스프링은 어떻게 동작하는가)
(커스텀) 어노테이션의 구성
커스텀 어노테이션은 메타 어노테이션을 사용하여 다음과 같은 구조를 가진다.
메타 어노테이션이란 커스텀 어노테이션을 구성할때 시점, 위치 등을 지정하기 위한 어노테이션이다.
어노테이션의 필드 타입은 enum, String 이나 기본 자료형, 기본 자료형의 배열만 사용할 수 있다.
@Target({ElementType.[적용대상]})
@Retention(RetentionPolicy.[정보유지되는대상])
Public @interface [어노테이션명]{
public 타입 elemntName() [default 값]
…
}
메타 어노테이션의 종류는 다음과 같다.
@Retention: 컴파일러가 어노테이션을 다루는 방법을 기술, 어느 시점까지 영향을 미치는지를 결정
RetentionPolicy.SOURCE: 컴파일 전까지만 유효
RetentionPolicy.CLASS: 컴파일러가 클래스를 참조할때까지 유효
RetentionPolicy.RUNTIME: 컴파일 이후 런타임 시기에도 JVM에 의해 참조가 가능(리플렉션)
@Target: 어노테이션 적용할 위치 선택
ElementType.PACKAGE: 패키지 선언
ElementType.TYPE: 타입 선언
ElemtnType.ANNOTATION_TYPE: 어노테이션 타입 선언
ElementType.CONSTRUCTOR: 생성자 선언
ElementType.FIELD: 멤버 변수 선언
ElementType.METHOD: 메서드 선언
ElementType.PARAMETER: 전달인자 선언
ElementType.TYPE_PAREMTER: 전달인자 타입 선언
ElementType.TYPE_USE: 타입 선언
@Documented: 해당 어노테이션을 Javadoc에 포함시킴
@Inherited: 어노테이션의 상속을 가능하게 함
@Repeatable: Java8부터 지원하며, 연속적으로 어노테이션을 선언할 수 있게 함
참조:
'Spring' 카테고리의 다른 글
스프링 예외처리 (0) | 2024.07.13 |
---|---|
ATDD 2주차 (0) | 2024.07.12 |
SuperBuilder 란 (0) | 2024.07.08 |
리플렉션 (0) | 2024.07.08 |
영속성 컨텍스트와 엔티티 매니저 (0) | 2024.07.08 |