ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Annotation
    Java/이론&문법 2023. 9. 15. 19:02

    정의

    • 클래스, 메소드, 변수등의 선언시에 @를 사용하는 것
    • JDK 5부터 등장, 메타데이터라고 불리기도 한다. 
    • 컴파일러에게 정보를 알려주거나, 컴파일할 때와 설치시의 작업을 지정하거나, 실행할 때 별도의 처리가 필요할 때 사용

     

    종류(JDK 6 기준)

    • @Override
      • 해당 메소드가 부모 클래스에 있는 메소드를 Override했다는 것을 명시적으로 선언
      • 이 메소드는 Override 된 것이니까 무언가 잘못 코딩되어 있다면 컴파일러에게 알려달라고 지정해주는 것과 같다. 
      • 즉, 개발자가 제대로 Override 한 것인지 컴파일 시 확인이 가능하다. 
    • @Deprecated
      • 미리 만들어져 있는 클래스나 메소드가 더 이상 사용되지 않는 경우가 있는데, 컴파일러에게 이 클래스 / 메소드는 더 이상 사용하지 않으며, 사용시 warning 날려주게끔  알려준다. 
      • @Deprecated 메소드 만들고 호출하면 경고 메시지 띄워준다. 
      • 하위호환성을 위해 Deprecated 선언이 꼭 필요하다. 
    • @SupressWarnings
      • 얘는 일부러 이렇게 코딩한 거니까 컴파일 시 경고 알리지 않아도 돼~ 
      • 속성값을 지정 ex ) @SuppressWarnings("deprecation") : deprecated 경고 메시지가 나오지 않는다.

     

     

     


    MetaAnnotation : 직접 어노테이션을 선언할 수 있다. 

    • @Target : 어노테이션을 어떤 것에 적용할 것인가
      • @Target(ElementType.METHOD) 이런식으로 사용이 가능하다. 
        • CONSTRUCTOR : 생성자 선언 시
        • FIELD : enum 상수를 포함한 필드 값 선언 시
        • LOCAL_VARIABLE : 지역변수 선언 시
        • METHOD : 메소드 선언 시
        • PACKAGE : 패키지 선언 시
        • PARAMETER : 매개변수 선언 시
        • TYPE : 클래스, 인터페이스, enum 선언 시
    • @Retention : 얼마나 오래 어노테이션 정보가 유지되는지 
      • @Retention(RetentionPolicy.RUNTIME) 이런 식으로 사용이 가능
        • SOURCE : 컴파일 시 사라짐 
        • CLASS : 클래스파일에 있는 어노테이션 정보가 컴파일러에 의해 참조 가능, JVM에서는 사라짐
        • RUNTIME : 실행 시 어노테이션 정보가 JVM에 의해 참조 가능
    • @Documented 
      • 해당 어노테이션에 대한 정보가 Javadocs에 포함된다는 뜻
    • @Inherited
      • 모든 자식 클래스에서 부모 클래스의 어노테이션을 사용 가능하다

     

    예제 코드 

    • @interface : @UserAnnotation으로 어노테이션 사용이 가능
    • 만약 생성자에도 이 어노테이션 쓰고 싶다 하면 @Target({ElementType.METHOD, ElementType.TYPE}) 이런식으로 사용가능
    @Target(ElementType.METHOD)// 이 어노테이션은 메소드에 사용할 수 있다고 지정 
    @Retention(RetentionPolicy.RUNTIME) // 어노테이션 유지 정보를 지정하는데 사용, 실행 시 참조하게 됨
    public @interface UserAnnotation {
        public int number();
        public String text() default "This is first Annotation";
    }
    public class UserAnnotationClass {
        @UserAnnotation(number = 0)
        public static void main(String[] args) {
            UserAnnotationClass sample = new UserAnnotationClass();
        }
        
        @UserAnnotation(number = 1)
        public void annotationSample () {
            
        }
    
        @UserAnnotation(number = 2, text = "Second")
        public void annotationSample2 () {
    
        }
    }

     

     

     

     

    'Java > 이론&문법' 카테고리의 다른 글

    java.lang package  (0) 2023.09.22
    Mutable & Immutable 객체  (0) 2023.09.15
    Nested Class  (0) 2023.09.15
    Java의 Exception  (0) 2023.09.15
    Interface, abstract class, enum  (0) 2023.09.10
Designed by Tistory.