본문 바로가기

언어/JAVA

17장 어노테이션

어노테이션 

Annotation

클래스나 메소드등의 선언시에 @를 사용하는 것.

JDK5부터 등장했다. 사전적 의미로는 '주석'이라는 뜻이있지만, 개발시 사용하는 '//', '/**/'와는 다르다

 

 

언제 사용되는가?

  • 컴파일러에게 코드 문법 에러를 체크하도록 정보를 알려주거나
  • 소프트웨어 개발툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보 제공
  • 실행시(런타임시)특정 기능을 별도의 처리가 필요할 때

 

미리 정해져 있는 어노테이션은 5개이다.

내용은 아래와 같다

 

@Override

해당 메소드가 부모클래스에 있는 메소드를 override했다는 것을 명시적으로 선언한다.

만약 자식클래스에 여러개의 메소드가 있을 때 어떤 메소드가 override가 되었는지 쉽게 알 수 없을 수 있다.

실수로 매개변수가 빠졌거나 구현해야하는데 해당 메소드를 찾을 수 없다면 컴파일 시 오류가 난다. 

 

@Deprecated

미리 만들어져있는 클래스나 메소드가 더이상 사용되지 않는 경우에 만약 사용한다면 컴파일 경고를 일으킨다.

 

@SuppressWarnings

컴파일 경고를 무시한다.

 

@SafeVarargs

Java7 부터 지원하며, 제너릭 같은 가변 인자 매개변수를 사용할 때 경고를 무시한다. 

 

@FunctionalInterface

Java8 부터 지원하며, 람다 함수 등을 위한 인터페이스를 지정한다. 메서드가 없거나 두 개 이상 되면 컴파일 오류가 난다. 

 

메타 어노테이션

Meta annotatio

다른 어노테이션에 적용되기 위한 어노테이션

 

Meta 어노테이션의 종류 

  • Retention: 해당 어노테이션의 정보를 어느 범위까지 유지할 것인지를 설정함
    • RetentionPolicy.SOURCE: 컴파일 전까지만 유효하며 컴파일 이후에는 사라짐
    • RetentionPolicy.CLASS: 컴파일러가 클래스를 참조할 때까지 유효함
    • RetentionPolicy.RUNTIME: Reflection을 사용하여 컴파일 이후에도 JVM에 의해 계속 참조가 가능함
  • Documented: JavaDoc 생성 시 Document에 포함되도록 함
  • Target: 해당 어노테이션이 사용되는 위치를 결정함
    • ElementType.PACKAGE : 패키지 선언시
    • ElementType.TYPE : 타입 선언시
    • ElementType.CONSTRUCTOR : 생성자 선언시
    • ElementType.FIELD : 맴버 변수 선언시
    • ElementType.METHOD : 메소드 선언시
    • ElementType.ANNOTATION_TYPE : 어노테이션 타입 선언시
    • ElementType.LOCAL_VARIABLE : 지역 변수 선언시
    • ElementType.TYPE_PARAMETER : 매개 변수 타입 선언시
  • Inherited: 해당 어노테이션을 하위 클래스에 적용함
  • Repeatable: Java8부터 지원하며, 연속적으로 어노테이션을 선언하는 것을 허용함



참고

https://mangkyu.tistory.com/130

 

'언어 > JAVA' 카테고리의 다른 글

19장 자바의 역사 / JVM  (0) 2021.10.30
18장 정리  (0) 2021.10.30
15장 Nested 클래스  (0) 2021.10.27
14장 예외처리  (0) 2021.10.24
13 인터페이스 / 추상클래스 / enum  (0) 2021.10.22