Skip to content

@Annotation

AnSungHo edited this page Oct 22, 2022 · 1 revision

📕@Annotation

📌@Annotation이란?

  • 사전적 의미로는 주석이라는 뜻이 있다.
  • JAVA에서는 코드 사이에 주석처럼 쓰여서 특별한 의미, 기능을 수행하도록 하는 기술.

📌@Annotation의 용도?

  • 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공
  • 런타임시 특정 기능을 실행하도록 정보 제공
  • 소프트웨어 개발툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보 제공

📌@Annotation의 종류

  • ❓내장 어노테이션

    • @Override
      • 선언한 메서드가 오버라이드 되었다는 것을 표시.
      • 만약 부모 클래스 또는 인터페이스에서 해당 메서드를 찾을 수 없다면 컴파일 에러 발생.
    • @Deprecated
      • 해당 메서드가 더 이상 사용되지 않음을 표시.
      • 만약 사용할 경우 검파일 경고를 발생,
      • since, **버전부터는 사용되지않으며, forRemoval, 이때부터 사라질것이다.
    • @SuppressWarnings
      • 선언한 곳의 컴파일 경고를 무시하도록 합니다.
    • @SafeVarargs
      • Java 7부터 지원, 제너릭 같은 가변인자의 매개변수를 사용할 때의 경고 무시
    • @Functionalinterface
      • java8부터 지원하며, 함수형 인터페이스를 지정하는 어노테이션
      • 만약 메서드가 존재하기 않거나, 1개 이상의 메서드가 존재할 경우 컴파일 오류
  • ❓메타 어노테이션

    • @Retention
      • Java 컴파일러가 어노테이션을 다루는 방법을 기술하며, 특정 시점까지 영향을 미치는지를 결정
      • 종류
        • RetentionPolicy.SOURCE : 컴파일 전까지만 유효. (컴파일 이후에는 사라짐)
        • RetentionPolicy.CLASS : 컴파일러가 클래스를 참조할 때까지 유효.
        • RetentionPolicy.RUNTIME : 컴파일 이후에도 JVM에 의해 계속 참조가 가능. (리플렉션 사용)
    • @Inherited
      • 어노테이션의 상속을 가능하게 해준다.
    • @Documented
      • 해당 어노테이션을 Javadoc에 포함시킵니다.
    • @Target
      • 어노테이션이 적용할 위치를 선택
      • 종류
        • ElementType.PACKAGE : 패키지 선언
        • ElementType.TYPE : 타입 선언
        • ElementType.ANNOTATION_TYPE : 어노테이션 타입 선언
        • ElementType.CONSTRUCTOR : 생성자 선언
        • ElementType.FIELD : 멤버 변수 선언
        • ElementType.LOCAL_VARIABLE : 지역 변수 선언
        • ElementType.METHOD : 메서드 선언
        • ElementType.PARAMETER : 전달인자 선언
        • ElementType.TYPE_PARAMETER : 전달인자 타입 선언
        • ElementType.TYPE_USE : 타입 선언
    • @Repeatable
      • Java8부터 지원하며, 연속적으로 어노테이션을 선언할 수 있게 해준다.