Java Annotation(어노테이션)

1. Java Annotation

Java 어노테이션은 JEE5부터 추가된 문법이며 기본적으로 인터페이스입니다. 사전적정의로는 주석이라는의미를 가지고 있고 특수한의미를 부여하거나 기능을 주입하면서 컴파일타임 시점이나 런타임시점에 해석됩니다. 기존의 xml의 불편함을 개선하기위해서 나오게된 Annotation(어노테이션) 이라고생각하면 됩니다.

2. Built-in Annotation

Java내에 내장되어 있는 어노테이션을 Built-in Annotation이라 불리어오며 주로 컴파일러에게 정보를 제공하게 됩니다.

@Override

메서드앞에 붙일수 있으며 현재 메서드가 슈퍼클래스의 메소드를 오버라이드한 메소드임을 명시합니다.

@Deprecated

annotation으로 타입, 필드, 메소드 등에 사용되며 @Deprecated 표시 되어 있는 메소드나 필드를 사용하면 빌드할 때 Warning 메시지를 보여주게됩니다. 즉, 컴파일러에게 이 메소드는 없어질 예정임을 명시합니다.

@SupressWarning

컴파일러에게 전달하여 경고를 제거합니다.

FunctionalInterface

컴파일러에게 다음의 인터페이스는 함수형 인터페이스라는것을 명시합니다.

3. Meta-Annotation

어노테이션의 동작 대상을 결정하는 어노테이션이며 어노테이션을 정의할때 주로 사용합니다.

@Target

어노테이션이 적용가능한 대상을 지정하는데 사용되며 여러값을 {} 괄호로 사용할 수 있다.

@Retention

SOURCE::, CLASS::, RUNTIME:: 세가지 유지정책으로 사용할 수 있는데 어노테이션이 유지되는 기간을 지정하는데 사용합니다.

@Documented

vavadoc으로 작성한 문서에 포함되도록 할 때 사용하는 어노테이션입니다.

@Inherited

어노테이션이 자손 클래스에도 상속되도록 하는 어노테이션입니다

@Native

네이티브 메서드에 의해 참조되는 상수필드에 붙이는 어노테이션입니다.

네이티브 메서드란?

JVM이 설치된 OS의 메서드를 말한다. 네이티브 메서드는 보통 C언어로 작성되어 있고 자바에서는 메서드의 선언부만 정의하고 구현은 하지 않는다.

4. Custom Annotation

Maker Annotation

요소가 한개도 없으며 단순히 표식으로 사용되는 어노테이션(의미전달)

Single-value Annotation

요소로 단일 변수만을 갖는 어노테이션입니다.

Full Annotaion

요소로 둘 이상의 변수를 갖는 어노테이션으로, 데이터를 배열 안에 key-value의 형태로 전달합니다.

5. 어노테이션 관련 정리

Spring @Annotation(어노테이션)
Spring Lombok @Annotation(어노테이션)