어노테이션
자바 애너테이션(Java Annotation)은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이다. 보통 @ 기호를 앞에 붙여서 사용한다. JDK 1.5 버전 이상에서 사용 가능하다. 자바 애너테이션은 클래스 파일에 임베디드되어 컴파일러에 의해 생성된 후 자바 가상머신에 포함되어 작동한다.[1]
개요
어노테이션이란 java 5부터 등장한 기능이며 @를 이용한 주석, 자바코드에 주석을 달아 특별한 의미를 부여한 것이다.
또한 컴퍼일러가 특정 오류를 억제하도록 지시하는 것과 같이 프로그램 코드의 일부가 아닌 프로그램에 관한 데이터를 제공, 코드에 정보를 추가하는 정형화된 방법이다.[2]
어노테이션이 붙은 코드는 어노테이션의 구현된 정보에 따라 연결되는 방향이 결정된다. 따라서 전체 소스코드에서 비즈니스 로직에는 영향을 주지는 않지만 해당 타겟의 연결 방법이나 소스코드의 구조를 변경할 수 있다.
쉽게 말해서 "이 속성을 어떤 용도로 사용할까, 이 클래스에게 어떤 역할을 줄까?"를 결정해서 붙여준다고 볼 수 있다.
어노테이션은 소스코드에 메타데이터를 삽입하는 것이기 때문에 잘 이용하면 구독성 뿐 아니라 체계적인 소스코드를 구성하는데 도움을 준다.
// 어노테이션 사용의 예 @CanSale public class Apple{ ... }
Annotation은 위의 예시와 같이 @(;AT)을 앞에 붙여서 표현한다. 이 어노테이션은 자바가 기본적으로 제공하기도 하고(@Deprecated, @Override, @SuppressWarning), 개발자가 직접 정의해서 사용할 수 있다. 개발자는 어노테이션을 붙일 타겟과 유지시기 등을 설정하여 자신이 원하는 용도로 활용 가능하다. 이 기능을 잘 활용한다면, 비즈니스 로직과는 별도로 시스템 설정과 관련된 부가적인 사항들은 @에게 위임하고 개발자는 비즈니스 로직 구현에 집중할 수 있다. 따라서 어노테이션을 통해 우리는 AOP(Aspect Oriented Programming; 관심지향프로그래밍)을 편리하게 구성할 수 있다. 어노테이션은 컴파일시기에 처리될 수도 있고 자바의 리플렉션을 거쳐서 런타임에 처리될 수도 있다. 리플렉션은 실행 중인 자바 클래스의 정보를 볼 수 있게 하고, 그 클래스의 구성 정보로 기능을 수행할 수 있도록 한다. 따라서 자바는 리플렉션 기능이 있기 때문에 어노테이션을 더욱 효율적으로 사용할 수 있다. [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>>