• [ 배경 ]
    • 어노테이션 이란?
      • 어노테이션은 Java5 부터 새롭게 추가된 요소.
      • 소스코드에 메다코드를 주는것.
      • 데이터의 유효성 검사 등을 쉽게    있다코드가 깔끔해진다.
      • 메타 데이터의 역할을 한다.
        • 메타 데이터란데이터를 위한 데이터 
          설명을 의미하는 데이터.(자신의 정보를 담고있는 데이터 이다.)

  • [ 과정 ]
    • 1) 기본 (built-in) 어노테이션의 종류 (유효성 검사)
      1. @Override
        1. 선언한 메서드가 오버라이드 되었다는것을 나타낸다.
        2. 만약 상위 부모 클래스에서 해당 메서드를 찾을  없다면 에러발생
      2. @Deprecated
        1. 해당 메서드가  이상 사용되지 않음을 표시, 사용할 경우 컴파일 에러발생
      3. @SuppressWarnings
        1. 선언한 곳의 컴파일 경고를 무시한다.
      4. @SafeVarags
        1. Java7부터 지원, 제네릭같은 가변인자의 매개변수를 사용할떄 경고무시.
      5. @FunctionalInterface
        1. Java8부터 지원, 함수형 인터페이스를 지원하는 어노테이션,
        2. 만약 메서드가 존재하지 않거나 1개이상의 메서드가 존재할 경우 컴파일 오류 발생

  • 2) 메타(meta) 어노테이션 종류 (정보의 정보 표시)
    1. @Retention
      1. RetentionPolicy(종류)
        1. SOURCE: 컴파일 전까지만 유효.
        2. CLASS: 컴파일러가 래스를 참조할때까지 유효
        3. RUNTIME: 컴파일 이후에도 JVM 의해 계속 참조 가능(리플렉션 에서 사용)
      1. 자바 컴파일러가 어노테이션을 다루는 방법 기술하며, 특정시점까지 영향을 미치는지 결정한다.
    2. @Target
      1. ElemenType(종류)
        1. PACKAGE: 패키지선언
        2. TYPE: 타입선언
        3. ANNOTATION_TYPE: 어노테이션 타입 선언
        4. CONSTRUCTOR: 생성자 선언
        5. FIELD: 멤버 변수 선언
        6. LOCAL_VARIABLE: 지역 변수 선언
        7. METHOD: 메서드 선언
        8. PARAMETER: 전달인자 선언
        9. TYPE_PARAMETER: 전달인자 타입 
        10. TYPE_USE: 타입 선언
      1. 어노테이션 적용 치를 선택
    3. @Documented
      1. Javadoc 포함시킨다.

  • *javadoc이란
    1. @Inherited
      1. 어노테이션의 상속을 가능하게 한다.
    2. @Repeatable
      1. Java8 부터 지원하며, 연속적(중복 정의)으로 어노테이션을 선언 할  있다.
    • java소스에 문서화를 하는 방법으로 클래스나 메소드에 주석으로 기술한 내용을 javadoc 명령어나 또는 이를 이용한 (maven의 pharse등) 을 사용하여 문서화 하는것을 말한다.
    • /**~ */ , 특별한 키워드는 @keyword으로 작성하면 된다. @author, {@link}, @deprecated, @see, @since 등등 이있음.

  • ex) @Repeatable(value = Colors.class)
    public @interface Color {}
    public @interface Colors {}

  • public @interface InsertIntData {
    int data() default 0;
    }

  • [ 결과 ]
    • 어노테이션은 기본적으로 인터페이스 형태를 취하고 있으며, interface 앞에 @ 표시를 해주면 된다.
      어노테이션의 필드에서는 enum, String이나 기본 자료형, 기본자료형의 배열을 사용할  있습니다.
    • 커스텀 (custome) 어노테이션도 가능하다.

  • [ 성과 ]
    • 어노테이션은 본질적인 목적은 소스코드에 메타데이터를 표현하는 것이다.
    • 단순 부가적인 표현 뿐만 아니라 리플렉션(reflection) 을 이용하면 어노테이션 지정만으로도 원하는 클래스를 주입할  있다.

'JAVA' 카테고리의 다른 글

GC(Garbage Collector)이란?  (0) 2020.08.07
JVM 이란?  (0) 2020.08.07
Jit 컴파일러란? 최적화 튜닝에 대해서  (0) 2020.08.07
객체지향 5원칙 SOLID 이란?  (0) 2020.07.09
리플렉션(reflection)이란?  (0) 2020.07.09

+ Recent posts