1. Annotation 이란?
        - 본질적인 목적은 소스 코드에 메타데이터를 표현하는 것이다. 
            (메타데이터 : 데이터에 대한 데이터, 즉 어떤 목적을 가지고 만들어진 데이터)
        - 리플렉션(reflection)을 이용하면 어노테이션 지정만으로도 원하는 클래스를 주입하는 것 등이 가능하다.
 (리플렉션이란 객체를 통해 클래스의 정보를 분석해 내는 프로그램 기법을 말한다.)
        - 비지니스 로직에는 영향을 주지 않지만, 해당 타겟의 연결 방법이나 소스코드의 구조를 변경 할 수 있다.
        - Annotation의 종류에는 빌트인 어노테이션, 메타 어노테이션, 커스텀 어노테이션이 있다.

       



 2. 빌트인(Built-in) 어노테이션
         
    - 자바 SDK에서 지원하는 어노테이션으로 @Override, @Deprecated, @SuppressWarnings 등이 있다.

  • @Override : 어노테이션은 현재 메소드가 수퍼클래스의 메소드를 오버라이드한 메소드임을 명시한다.
                  만약 수퍼클래스 또는 구현해야할 인터페이스에 해당 메소드가 없으면 컴파일러가 에러를 발생시킨다.

  • @Deprecated : 해당 메소드가 더 이상 사용되지 않음을 표시한다. 
                      만약 사용할 경우 컴파일 경고를 발생시킨다.

  • @SuppressWarnings : 선언한 곳의 컴파일 경고를 무시하도록 한다.
                          Object형을 Element로 하는 컬렉션을 사용하면 컴파일러 경고가 발생하는데, 이 어노테이션을
                        사용하여 프로그래머의 의도적인 Object형 사용임을 알려 경고를 제거할 수 있다.

  • @SafeVarargs : 제너릭 같은 가변인자의 매개변수를 사용할 때의 경고를 무시한다.
  • @FunctionalInterface : 함수형 인터페이스를 지정하는 어노테이션.
                             만약 메소드가 존재하지 않거나, 1개 이상의 메소드가 존재할 경우 컴파일 오류를 발생시킨다.





      

 3. 메타(Meta) 어노테이션

  • @Retention : 자바 컴파일러가 어노테이션을 다루는 방법과 관련이 있다. 
                                        소스파일, 클래스파일, 런타임 중 어느 시점까지 어노테이션을 보유하고 있을 것인지를 결정한다.

  • @Target : 어노테이션이 적용할 위치를 선택한다.  @Target (ElementType.~)
    • ElementType.PACKAGE : 패키지 선언시
    • ElementType.TYPE : 타입 선언 시
    • ElementType.ANNOTATION_TYPE : 어노테이션 타입 선언시
    • ElementType.CONSTRUCTOR : 생성자 선언시
    • ElementType.FIELD : 멤버변수 선언시
    • ElementType.LOCAL_VARIABLE : 지역 변수 선언시
    • ElementType.METHOD : 메소드 선언시
    • ElementType.PARAMETER : 파라미터 선언시
    • ElementType.TYPE_PARAMETER : 파라미터 타입 선언시
    • ElementType.TYPE_USE : 타입선언시
  • @Documented : 해당 어노테이션을 Javadoc에 포함시킨다.
  • @Inherited : 어노테이션의 상속을 가능하게 한다.
  • @Repeatable : 연속적으로 어노테이션을 선언할 수 있게 해준다.


  (커스텀 어노테이션은 다음 글 : )




+ Recent posts