: 어노테이션은 어노테이션된 요소들의 행동으로부터 프로그램의 행위를 추출하여, 필요하다면 컴파일러나 VM이 상호 의존적인 코드를 생성하는, 프로그램 요소와 메타 태그에 관계된 매커니즘.
: 사전적 의미로는 주석이라는 뜻을 가지고 있으며, 자바의 어노테이션은 소스코드에 추가해서 사용할 수 있는 메타 데이터의 일종이다.
메타데이터 : 애플리케이션이 처리해야 할 데이터가 아니라 컴파일 과정과 실행 과정에서 코드를 어떻게 처리해야하는지 알려주기 위한 추가 정보
자바에서 기본적으로 제공하는 어노테이션
@Override
상속받은 부모 클래스의 메소드를 오버라이드한 메소드임을 컴파일러에게 명시한다.
만일 부모 클래스에 해당하는 메소드가 없다면 컴파일 오류가 발생한다.
@Deprecated
마커 어노테이션으로 차후 버전에 지원되지 않을 수 있기 때문에 더 이상 사용되지 말아야할 메소드를 의미한다.
하위호환을 위해서 메소드 자체를 없애지는 못하지만 사용하지 말것을 알리고 싶을때 사용한다.
이 메소드를 사용하는 애플리케이션을 컴파일 할 경우 컴파일 경고가 발생한다.
@SuppressWarnings
컴파일러 경고를 출력하지 않도록 설정한다.
컴파일러 경고는 경고일 뿐, 경고 상황을 개발자가 알고 있는 경우에는 컴파일 로그가 지저분해지고 진짜 잡아야하는 경고들이 잘 보이지 않을 수 있기 때문에 이 어노테이션을 쓰게 된다.
all
모든 경고를 억제합니다.boxing
boxing/unboxing 오퍼레이션과 관련된 경고를 억제합니다.cast
캐스트 오퍼레이션과 관련된 경고를 억제합니다.dep-ann
권장되지 않는 어노테이션과 관련된 경고를 억제합니다.deprecation
권장되지 않는 기능과 관련된 경고를 억제합니다.fallthrough
switch 문에서 누락된 break 문과 관련된 경고를 억제합니다.finally
리턴되지 않는 마지막 블록과 관련된 경고를 억제합니다.hiding
변수를 숨기는 로컬과 관련된 경고를 억제합니다.incomplete-switch
switch 문에서 누락된 항목과 관련된 경고를 억제합니다(enum case).javadoc
javadoc 경고와 관련된 경고를 억제합니다.nls
비nls 문자열 리터럴과 관련된 경고를 억제합니다.null
널(null) 분석과 관련된 경고를 억제합니다.rawtypes
원시 유형 사용법과 관련된 경고를 억제합니다.resource
닫기 가능 유형의 자원 사용에 관련된 경고 억제합니다.restriction
올바르지 않거나 금지된 참조 사용법과 관련된 경고를 억제합니다.serial
직렬화 가능 클래스에 대한 누락된 serialVersionUID 필드와 관련된 경고를 억제합니다.static-access
잘못된 정적 액세스와 관련된 경고를 억제합니다.static-method
static으로 선언될 수 있는 메소드와 관련된 경고를 억제합니다.super
수퍼 호출을 사용하지 않는 메소드 겹쳐쓰기와 관련된 경고를 억제합니다.synthetic-access
내부 클래스로부터의 최적화되지 않은 액세스와 관련된 경고를 억제합니다.sync-override
동기화된 메소드를 오버라이드하는 경우 누락된 동기화로 인한 경고 억제합니다.unchecked
미확인 오퍼레이션과 관련된 경고를 억제합니다.unqualified-field-access
규정되지 않은 필드 액세스와 관련된 경고를 억제합니다.unused
사용하지 않은 코드 및 불필요한 코드와 관련된 경고를 억제합니다.@SafeVaragrs
제네릭과 같은 가변 인자의 매개변수를 사용할 때의 경고를 나타내지 않는다.
@FunctionalInterface
함수형 인터페이스라는 것을 의미한다.
어노테이션에 붙이는 어노테이션으로, 어노테이션을 정의하는데 사용한다.
@Target
어노테이션을 정의할 때 적용 대상을 지정하는데 사용한다.
@Inherited
어노테이션이 하위 클래스에 상속되도록 하기 위해 사용한다.
상속받는 클래스도 같은 어노테이션 사용해야 한다.
(기본적으로 어노테이션은 상속되지 않습니다.)
@Retention
어노테이션이 유지되는 기간을 정하기 위해 사용한다.
@Documented
자바 문서에도 어노테이션 정보가 공개하기 위해 사용한다.
출처: https://dev-ahn.tistory.com/130 [Developer Ahn:티스토리]