본문 바로가기
카테고리 없음

Annotation

by wlgpdnjs 2022. 11. 29.

Annotation(어노테이션)

어노테이션은 클래스나 메소드 등의 선언시 @를 사용하는 것을 말합니다. 소스코드에 추가해서 사용할 수 있는 메타 데이터의 일종으로 컴파일 과정과 실행 과정에서 코드를 어떻게 처리해야하는지를 알려주기 위한 추가 정보입니다.

어노테이션을 사용하는 목적은 아래와 같습니다.

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

 

어노테이션 종류

Java에서는 사용하기 위해 정해져 있는 어노테이션과 어노테이션을 선언하기 위한 메타 어노테이션이 있습니다.

 

이미 정의되어 있는 어노테이션은 아래와 같습니다.

@Override

  • 선언한 메소드가 오버라이드 된 것을 의미
  • 상위(부모) 클래스(또는 인터페이스)에서 해당 메소드를 찾지 못하면 컴파일 에러 발생시킴

 

@Deprecated

  • 해당 메소드는 더이상 사용되지 않음을 표시
  • 사용하는 경우 컴파일 경고 발생시킴

 

@SuppressWarning

  • 선언한 곳의 컴파일 경고 무시함
  • 어노테이션 인자에 따라 경고 메시지 제한
    • @SuppressWarnings("all"): 모든 경고 메시지 무시
    • @SuppressWarnings(”deprecation”) : Deprecated 메서드를 사용한 경우 발생하는 경고 메시지를 무시
    • @SuppressWarnings(”fallthrough”) : switch문에서 break문을 사용하지 않을 때 발생하는 경고 메시지 무시
    • @SuppressWarnings(”finally”) : finally 관련 경고 메시지 무시
    • @SuppressWarnings(”null”) : null 관련 경고 메시지 무시
    • @SuppressWarnings(”unchecked”) : 검증되지 않은 연산자 관련 경고 메시지 무시
    • @SuppressWarnings(”unused”) : 사용하지 않는 코드 관련 경고 메시지 무시

 

@SafeVarargs

  • 제너릭 같은 가변인자 매개변수 사용할 때 경고 무시

@FunctionalInterface

  • 함수형 인터페이스 지정
  • 메소드가 존재하지 않거나, 1개 이상의 메소드(default 메소드 제외)가 존재할 경우 컴파일 오류 발생

 

메타 어노테이션

@Retention

  • 자바 컴파일러가 어노테이션을 다루는 방법을 기술하며, 특정 시점까지 영향을 미치는지 결정
    • RetentionPolicy.SOURCE : 컴파일 전까지만 유효(컴파일 이후에는 사라짐)
    • RetentionPolicy.CLASS : 컴파일러가 클래스를 참조할 때까지 유효
    • RetentionPolicy.RUNTIME : 컴파일 이후에도 JVM에 의해 계속 참조가 가능(리플렉션 사용)

 

@Documented

  • 해당 어노테이션을 Javadoc(API)에 포함시킴

 

@Target

  • 어노테이션이 적용할 위치를 지정
    • ElementType.TYPE: 클래스, 인터페이스, 열거 타입
    • ElementType.ANNOTATION_TYPE: 어노테이션
    • ElementType.FIELD: 필드
    • ElementType.CONSTRUCTOR: 생성자
    • ElementType.METHOD: 메소드
    • ElementType.LOCAL_VARIABLE: 로컬변수
    • ElementType.PACKAGE: 패키지

 

@Inherited

  • 자식클래스에서 부모 클래스의 어노테이션을 사용 가능하다는 것을 선언

 

@Repeatable

  • 연속적으로 어노테이션 선언