어노테이션

위키원
tjdgus399 (토론 | 기여)님의 2020년 8월 12일 (수) 10:24 판
이동: 둘러보기, 검색

자바 애너테이션(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. 1.0 1.1 <자바 애너테이션>,<<위키백과>>
  2. <어노테이션(Annotation)>,<<빨간색 코딩>>
  3. <Java Annotation>,<<NEXTREE>>

참고자료

같이보기