애너테이션 (@)

애너테이션이란 ?

  • 주석처럼 프로그래밍 언어에 영향을 미치지않으며 , 유용한 정보를 제공 (소스코드설명+소스코드)
  • Junit 이라는 설정정보제공을 위한것 // 예전에는 XML

  • /**
  • *
  • ** / < javadoc.exe 주석>

@Override

  • 오버라이딩을 올바르게했는지 컴파일러가 체크하게함
  • 오버라이딩 할때 메서드 이름을 잘못적는 실수를 하는 경우가많다

대,소문자

  • 오버라이딩 할때는 메서드 선언부 앞에 @Override 를 붙이자

      class Parent {
          void parentMethod() {}
      }
    
      class Child extends Parent {
          @Override
          void parentmethod() {} // @Override 적으먼 소문자틀린걸 컴파일러가 알아채게함
      }
    

@Deprecated

  • 앞으로 사용하지 말라는 권장하는 애너테이션 , 필드나 메서드에 붙임
  • @Deprecated의 사용예 , Date 클래스의 getDate()

      @Deprecated
      public int getDate() {
          return normalize().getDayOfMonth();
      }
    

@Functionallnterface

  • 함수형 인터페이스에 붙이면 , 컴파일러가 올바르게 작성했는지 체크
  • 함수형 인터페이스에는 딱 하나의 추상메서드만을 가져야한다는 제약이있음

@SuppressWarnings

  • 컴파일러의 경고메시지가 나타나티않게 억제함
  • ()안에 억제하고자하는 경고의 종류를 문자열로지정

@SuppressWarnings(“unchecked”) // 지네릭스와 관련된 경고를 억제. ArrayList list = new ArrayList(); // 지네락 타입(지네릭클래스)을 지정하지 않았음. list.add(obj); // 여기서 경고가 발생

  • ‘-Xlint’ 옵션으로 컴파일하면 , 경고메시지를 확인할수있다. 괄혼[]안이 경고의 종류. 아래의경우 rawtypes

메타애너테이션

@Target

  • 애너테이션을 정의할때 , 적용대상에 지정에 사용

      import static java.lang.annotation.ElementType.*;
    
      @Target({FIELD , TYPE , TYPE_USE})
      public @interface MyAnnotation {}
    
      @MyAnnotation   // 적용 대상이 TYPE 인경우
      class MyClass {
          @MyAnnotation // 적용 대상이 FIELD 인경우
          int i ;
    
          @MyAnnotation // 적용대상이 TYPE_USE 인경우 
          MyClass mc;
      }
    

@Retention

  • 애너테이션이 유지(retention) 되는 기간을 지정하는데사용
    • SOURCE : 소스 파일에만 존재 , 클래스파일에는 존재하짖않음 ,컴파일러
    • RUNTIME : 클래스파일에 존재 , 실행시 사용가능
    • CLASS : 클래스파일에 존재 , 실행시 사용불가 .기본값 // 잘사용하지않음
  • 컴파일러에 의해 사용되는 애너테이션의 유지정책은 SOURCE이다.

  • 실행시에 사용가능한 애너테이션의 정책은 RUNTIME 이다 .

@Documented , @Inherited

  • javadoc 으로 작성한문서에 포함시킬때 사용

  • 애너테이션을 자손클래스에 상속하고자 할때 ,@Inherited

@Repeatable

  • 반복해서 붙일수 있는 애너테이션을 정의할때 사용
  • @Repeatable 이 붙은 애너테이션은 반복해서 붙일수있다
  • @Repeatable 인 @ToDo를 하나로 묶을 컨테이너 애너테이션도 정의해야함

애너테이션 타입 정의하기

  • 조상은 > Annotation 은 인터페이스이다
  • 애너테이션을의 추상메서드를 따로 내가 정의해서사용할수있음
  • 적용시 값을 지정하지 않으면 , 사용될수있는 기본값 지정가능(null 제외)
  • 요소가 하나이고 이름이 value 일때는 이름생략가능
  • 배열인경우 값이없을떄 {} 여러개 {} 값이1개면 {}생략가능

마커 애너테이션

  • 요소가 하나도 정의되지 않은 애너테이션 {}< 안에없음

애너테이션의 규칙

  • 애너테이션의 요소를 선언할때 아래의 규칙을 반드시 지켜야한다 요소의 타입은 기본형 , String ,enum , 애너테이션 , Class(설계도) 만 허용됨 추상메서드, 괄호()안에 매개변수를 선언할수없다 예외를 선언할수없다 요소를 타입 매개변수 <> 지네릭 으 로 정의할수없다

Categories:

Updated:

Leave a comment