포도가게의 개발일지

[JAVA] Annotation? 본문

Spring boot

[JAVA] Annotation?

grape.store 2022. 1. 20. 17:27
반응형

Annotation(주석)?

- 프로그램에게 추가적인 정보를 제공해주는 메타데이터(meta data: 데이터 설명을 위한 데이터)

 

용도

  • 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공
  • 소프트웨어 개발툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보 제공
  • 실행시(런타임시)특정 기능을 실행하도록 정보를 제공

어노테이션을 사용하는 순서는 다음과 같다.

  1. 어노테이션의 정의

  2. 클래스에 어노테이션을 배치

  3. 코드가 실행되는 중에 Reflection을 이용하여 추가정보를 획득하여 기능실시

 

1. 어노테이션의 정의

@Target({ElementType.[적용대상]})
@Retention(RetentionPolicy.[정보유지되는 대상])
public @interface annotationName{
	public 타입 elementName() [default 값]
    ...
}
// 어디서 어노테이션을 붙일 수 있는지 target으로 정해줌 

public enum ElementType {
    TYPE, // 클래스, 인터페이스, 열거 타입
    FIELD, // 필드
    METHOD, // 메소드
    PARAMETER,
    CONSTRUCTOR, // 생성자
    LOCAL_VARIABLE, // 로컬변수
    ANNOTATION_TYPE, // 어노테이션
    PACKAGE, // 패키지
    TYPE_PARAMETER,
    TYPE_USE,
    MODULE;

    private ElementType() {
    }
}
// 어노테이션이 언제까지 존재할수있는지 정해줌

public enum RetentionPolicy {
    SOURCE, // 컴파일을 통해 바이트코드가 되기전까지만 존재
    CLASS, // 컴파일 후 바이트코드에는 남아있지만 runtime시 리플렉션을 통해 읽지 못함
    RUNTIME; // 컴파일 후 바이트코드에도 남고 runtime시 리플렉션을 통해 읽을 수 있음

    private RetentionPolicy() {
    }
}

2. 클래스에 어노테이션을 배치

- 어노테이션의 사용은 클래스를 참고하는 소스의 흐름상에서 Reflection을 사용하는 방법을 통해서 어노테이션 값을 활용하도록 한다. 말로는 설명이 애매하니 예제 소스를 작성하도록 한다. 

'Spring boot' 카테고리의 다른 글

[JAVA] Generic  (0) 2022.01.21
[Spring]Transaction?  (0) 2022.01.20
[JAVA] 빌드 과정  (0) 2022.01.13
[JAVA] LOMBOK이란?  (0) 2022.01.12
[Spring] 생성자주입? 필드주입? 세터주입?  (0) 2022.01.05
Comments