[Spring] 메타어노테이션(@Target, @Retention, @Documented 등)

류넹·2024년 3월 5일
1

Spring

목록 보기
22/50

📍 @어노테이션

  • 자바 소스 코드에 메타정보를 표현하기 위해서 사용된다.

메타정보

  • 소스코드에 추가해서 사용할 수 있는 부가정보
  • 컴파일 과정, 애플리케이션 실행과정에서 코드를 어떻게 처리해야 하는지를 알려주기 위한 추가정보




📌 @어노테이션의 형식

@Target({ElementType.TYPE, ElementType.Method, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface 어노테이션이름 {
	타입 속성명() default 기본값;
    타입 속성명();
}

1. @Target

  • 메타어노테이션
  • 어노테이션을 적용할 위치를 나열한다.
  • 종류
    • ElementType.TYPE
      • 클래스, 인터페이스, 열거형에 적용할 수 있다.
    • ElementType.ANNOTATION_TYPE
      • 다른 어노테이션에 적용할 수 있다.
    • ElementType.FIELD
      • 멤버변수에 적용할 수 있다.
    • ElementType.CONSTRUCTOR
      • 생성자에 적용할 수 있다.
    • ElementType.METHOD
      • 메서드에 적용할 수 있다.
    • ElementType.PARAMETER
      • 매개변수에 적용할 수 있다.

2. @Retention

  • 메타어노테이션
  • 어노테이션 유지 기간을 설정한다.
  • 종류
    • Retention.SOURCE
      • 컴파일 이후에는 삭제된다.
      • 소스코드에서 활용된다.
    • Retention.CLASS
      • 자바 실행파일(.class 파일)까지 어노테이션 정보가 유지된다.
    • Retention.RUNTIME
      • 자바 실행파일(.class 파일)까지 어노테이션 정보가 유지되고, 애플리케이션 실행 시점에 정보를 가져올 수 있다.
      • 일반적으로 대부분의 어노테이션 혹은 사용자 정의 어노테이션의 유지기간으로 사용된다.

3. @Documented

  • 자바 API 문서에 어노테이션 정보가 표시되도록 한다.

4. @Inherited

  • 자식 클래스가 어노테이션을 상속받을 수 있다.

5. @Repeatable

  • 반복적으로 어노테이션을 선언할 수 있다.




@어노테이션 사용하기

  1. 어노테이션 적용 시 값을 지정하지 않으면, 기본값이 적용된다.
public @Sample {
	String path() default "";
    String method() default "GET";
}

@Sample(path = "/add", method = "GET")
@Sample(path = "/add", method = "POST")
@Sample(path = "/add")	// method 요소의 값: GET(기본값)
  1. 어노테이션의 요소이름이 value라면 어노테이션 작성 시 요소의 이름은 생략 가능하다.
public @interface Sample {
	String value();
}

@Sample(value = "값")
@Sample("값")
  1. 어노테이션 요소의 타입이 배열인 경우 중괄호를 사용해야 한다.
    단, 값이 하나밖에 없을 때는 중괄호 생략 가능
pulic @interface Sample {
	String[] path();
}

@Sample(path = "/add")
@Sample(path = {"/add"})
@Sample(path = {"/add", "/create"})




@어노테이션의 규칙

  • 요소의 타입은 기본자료형, String, enum, 어노테이션, Class만 허용한다.
  • 괄호() 안에 매개변수를 선언할 수 없다.
  • 예외를 선언할 수 없다.
profile
학습용 커스터마이징 간단 개발자 사전

0개의 댓글