본문 바로가기
Java

[Java] 어노테이션

by 스응 2023. 6. 18.
728x90
728x90

어노테이션 (Annotation)

  - 프로그램의 코드에 메타데이터를 추가하는 기능을 제공하는 것

  - 컴파일러 or 런타임 시점에 코드를 처리하는 도구들에게 추가적인 정보를 제공함

  - 주로 클래스, 메서드, 변수, 매개변수 등에 부착해서 사용됨

  - 형식 : @어노테이션(속성1=값1, 속성2=값2, ...)

  - 코드 가독성 향상

  - 자동화된 코드 생성, 테스트, 디버깅 등에 활용

 

#  빌트인 어노테이션 (Built-in Annotation)

  - @Override

      : 상위 클래스나 인터페이스의 메서드를 오버라이드함을 나타냄

  - @Deprecated

      : 해당 요소가 더 이상 사용되지 않음을 나타냄

  - @SuppressWarnings

      : 컴파일러의 경고를 무시하도록 지정함

 

#  메타 어노테이션 (Meta Annotation)

  - @Retention

      : 어노테이션의 유지 정책을 지정함 (소스, 클래스, 런타임)

         → 어노테이션의 수명 결정 (컴파일 시점까지 or 런타임 시점까지)

      [옵션]

          i. RetentionPolicy.SOURCE

              : 소스 코드에서만 유지  /  컴파일 과정에서는 제거

          ii. RetentionPolicy.CLASS

              : 컴파일러에 의해 클래스 파일까지 유지   /  런타임 시 무시

          iii. RetentionPolicy.RUNTIME

              : 런타임 시에도 유지

                  → 런타임 시에 리플렉션을 통해 어노테이션 정보를 읽을 수 있음

  - @Target

      : 어노테이션을 부착할 수 있는 대상을 지정함 (클래스, 메서드, 필드)

      [옵션]

          i. ElementType.TYPE

              : 클래스, 인터페이스 (+어노테이션), 열거형(enum)

          ii. ElementType.FIELD

              : 필드 (인스턴스 변수)

          iii. ElementType.METHOD

              : 메서드

 

#  커스텀 어노테이션 (Custom Annotation)

  - 개발자가 직접 정의한 어노테이션

  - 애플리케이션에 맞는 사용자 정의 어노테이션을 만들 수 있음

 

 


커스텀 어노테이션 정의 방법

1
2
3
4
5
6
7
@Retention(value = RetentionPolicy.RUNTIME) // 이 어노테이션의 수명을 런타임 시점까지 유지하도록 정의
@Target(ElementType.TYPE) //이 어노테이션을 클래스 레벨에서만 사용할 수 있도록 정의
public @interface 어노테이션명 { // 커스텀 어노테이션을 정의
 
    String value() default ""// 어노테이션 요소 정의, default로 기본값 
 
}
cs

 

커스텀 어노테이션 사용 방법

1
2
3
4
@어노테이션명(value = "값")
public class MyClass {
    // ... 
}
cs

 

320x100
반응형

댓글