Nulog
article thumbnail
Published 2023. 7. 14. 23:50
[JAVA] Annotation JAVA

JAVA 및 여러 프레임워크에서 쓰이는 애너테이션의 개념에 대해 소개하려 한다.

 

Annotation

소스 코드가 컴파일되거나 실행될 때, 컴파일러 및 다른 프로그램에 필요한 정보를 전달해주는 문법 요소

표준 애너테이션

: JDK에 내장된 일반 애너테이션

  • @로 시작하며, 클래스/인터페이스/필드/메서드 등에 붙여 사용한다.
애너테이션 설명
@Override 컴파일러에게 오버라이드한 메서드라는 것을 알린다.
컴파일러는 이 애너테이션을 입력받으면, 상위클래스의 동일한 이름의 메서드가 존재하는지 검사한다.
만약 없다면, 컴파일 에러가 발생한다.
@Deprecated 다른 코드와의 호환성 문제로 삭제하기 곤란해 남겨두어야 하지만,
더 이상 사용을 권장하지 않을 때 사용한다.
@SuppressWarnings 컴파일러의 특정 경고 메시지가 나타나지 않도록 하는 애너테이션.
개발자의 의도가 있는 코드에 사용한다.
(아래 표 상세 기능 추가)
@SafeVarargs 제네릭 같은 가변인자 매개변수 사용시 경고를 무시한다. (JDK 1.7 이상)
@FunctionalInterface 함수형 인터페이스라는 것을 알린다. (JDK 1.8 이상)
컴파일러가 함수형 인터페이스가 올바르게 선언되었는지 검사한다.
함수형 인터페이스는 단 하나의 추상 메서드만을 가져야 한다.
@Native native 메서드에서 참조되는 상수 앞에 붙인다. (JDK 1.8)

 

애너테이션 설명
@SuppressWarnings(”all”) 모든 경고 억제한다.
@SuppressWarnings(”deprecation”) Deprecated 메서드 사용 시 발생하는 경고 억제>한다.
@SuppressWarnings(”fallthrough”) switch 문에서 break 구문이 없을 때 발생하는 경고 억제한다.
@SuppressWarnings(”finally”) finally와 관련된 경고 억제한다.
@SuppressWarnings(”null”) null과 관련된 경고 억제한다.
@SuppressWarnings(”unchecked”) 검증되지 않은 연산자와 관련된 경고 억제한다.
@SuppressWarnings(”unused”) 사용하지 않는 코드와 관련된 경고 억제한다.

메타 애너테이션

: 다른 애너테이션을 정의하기 위한 애너테이션

  • 애너테이션 위에 붙여 사용한다
애너테이션 설명
@Target 애너테이션이 적용가능한 대상을 지정하는데 사용한다.
@Documented 애너테이션 정보가 javadoc 문서에 포함되도록 한다.
표준, 메타애너테이션 중 @Override와 @SuppressWarnings를 제외하고 모두 적용되어 있다.
@Inherited 하위 클래스가 애너테이션을 상속받도록 한다.
상위 클래스에 붙이면, 하위 클래스에도 상위 클래스에 붙은 애너테이션들이 적용된다.
@Retention 애너테이션의 지속 시간을 결정하기 위해 사용한다.
@Repeatable 애너테이션 반복 사용 (JDK 1.8)

@Target

:Target 애너테이션을 사용해 지정할 수 있는 대상의 타입

대상 타입 범위 적용 대상 타입 범위 적용
ANNOTATION_TYPE 애너테이션 PACKAGE 패키지
CONSTRUCTOR 생성자 PARAMETER 매개변수
FIELD 필드(멤버변수, 열거형 상수) TYPE 타입(클래스, 인터페이스, 열거형)
LOCAL_VARIABLE 지역변수 TYPE_PARAMETER 타입 매개변수
METHOD 메서드 TYPE_USE 타입이 사용되는 모든 대상

@Retention

유지 정책 설명
SOURCE 소스 파일에 존재, 클래스파일에는 존재하지 않음
CLASS 클래스 파일에 존재, 실행 시에 사용 불가, 기본값
RUNTIME 클래스 파일에 존재, 실행 시에 사용가능

사용자 정의 애너테이션

: 직접 생성하여 정의하여 사용한다.

  • 애너테이션은 java.lang.annotaion 인터페이스를 상속받기 때문에 다른 클래스나 인터페이스를 상속 받을 수 없다.
  • 인터페이스 앞에 @를 붙여 애너테이션을 정의할 수 있다.
@interface 애너테이션명 { // 인터페이스 앞에 @기호를 붙여 애너테이션을 정의
 	타입 요소명(); // 애너테이션 요소 선언
 }

'JAVA' 카테고리의 다른 글

[JAVA] Stream(1) Stream 생성하기  (0) 2023.07.17
[JAVA] Lambda  (0) 2023.07.15
[JAVA] Map을 순회하는 방법  (0) 2023.07.14
[JAVA] 예외처리  (0) 2023.07.14
[JAVA] 제네릭  (0) 2023.07.14
profile

Nulog

@Nuni0617

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!