어노테이션
자바 애너테이션(Java Annotation)은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이다. 보통 @ 기호를 앞에 붙여서 사용한다. JDK 1.5 버전 이상에서 사용 가능하다. 자바 애너테이션은 클래스 파일에 임베디드되어 컴파일러에 의해 생성된 후 자바 가상머신에 포함되어 작동한다.[1]
개요
어노테이션이란 java 5부터 등장한 기능이며 @를 이용한 주석, 자바코드에 주석을 달아 특별한 의미를 부여한 것이다.
또한 컴퍼일러가 특정 오류를 억제하도록 지시하는 것과 같이 프로그램 코드의 일부가 아닌 프로그램에 관한 데이터를 제공, 코드에 정보를 추가하는 정형화된 방법이다.[2]
어노테이션이 붙은 코드는 어노테이션의 구현된 정보에 따라 연결되는 방향이 결정된다. 따라서 전체 소스코드에서 비즈니스 로직에는 영향을 주지는 않지만 해당 타겟의 연결 방법이나 소스코드의 구조를 변경할 수 있다.
쉽게 말해서 "이 속성을 어떤 용도로 사용할까, 이 클래스에게 어떤 역할을 줄까?"를 결정해서 붙여준다고 볼 수 있습니다.
어노테이션은 소스코드에 메타데이터를 삽입하는 것이기 때문에 잘 이용하면 구독성 뿐 아니라 체계적인 소스코드를 구성하는데 도움을 줍니다.[3]
특징
용도
- @Override 어노테이션처럼 컴파일러를 위한 정보를 제공하기 위한 용도
- 스프링 프레임워크의 @Controller 어노테이션처럼 런타임에 리플렉션을 이용해서 특수 기능을 추가하기 위한 용도
- 컴파일 과정에 어노테이션 정보로부터 코드를 생성하기 위한 용도
애너테이션
내장 애너테이션
자바에서 기본적으로 제공하는 어노테이션들이다.
- @Override
해당 메소드가 부모 클래스에 있는 메소드를 재정의했다는 것을 명시적으로 선언한다.
- @Deprecated
더 이상 사용되지 않는 클래스나 메소드 앞에 추가한다.
- @SuppressWarnings
프로그램에는 문제가 없는데 간혹 컴파일러가 경고를 뿜을때가 있다.
이를 무시하라고 프로그래머에게 알려준다.
- @safeVarargs
제너릭같은 가변인자 매개변수를 사용할 때 무시한다.(java 7 이상)
- @FunctionalInterface
람다 함수 등을 위한 인터페이스를 지정한다.
메소드가 없거나 두개 이상이 되면 컴파일 오류가 난다.(java 8 이상)
메타 애너테이션
Meata Annotation을 활용해 Custom Annotation을 만들 수 있다.
- @Retention
어떤 시점까지 어노테이션이 영향을 미치는지 결정한다.
- @Documented
해당 어노테이션 정보가 JavaDocs(API) 문서에 포함한다.
- @Target
어노테이션이 적용할 위치를 결정한다.
- @Inherited
모든 자식 클래스가 부모 클래스의 어노테이션을 사용할 수 있다는 것을 선언한다.
- @Repeatable
반복적으로 어노테이션을 선언할 수 있다.
java 7부터 추가 애너테이션이 언어에 추가되었다.[1]
- @SafeVarargs
- @FunctionalInterface
- @Repeatable
각주
- ↑ 1.0 1.1 <자바 애너테이션>,<<위키백과>>
- ↑ <어노테이션(Annotation)>,<<빨간색 코딩>>
- ↑ <Java Annotation>,<<NEXTREE>>