티스토리 뷰

728x90
반응형

목표

자바의 애노테이션에 대해 학습하기

 

스터디 목차

  • 애노테이션 정의하는 방법
  • @retention
  • @target
  • @documented
  • 애노테이션 프로세서

 

1. 애노테이션 정의하는 방법

 

애노테이션(Annotation) 이란?

자바에서 클래스 또는 메서드 앞에 @Override 같은 @ 표시가 애노테이션 이다.

이 애노테이션은 java5 부터 새롭게 추가되었다.

 

이 애노테이션으로 인해 데이터의 유효성 검사 등을 쉽게 알 수 있고, 이와 관련한 코드가 깔끔해지게 된다.

애노테이션의 용도는 다양한 목적이 있지만 메타 데이터의 비중이 가장 크다 할 수 있다.

 

메타 데이터(Meta-Data) : 데이터를 위한 데이터를 의미하며, 데이터에 대한 설명을 의미하는 데이터 (자신의 정보를 담고 있는 데이터)

 

애노테이션 정의 방법

public @interface Myannotation{}

 

자바에서 제공하는 애노테이션 (빌트 인 애노테이션)

  • @Override - 메소드가 오버라이드 됐는지 검증한다. 만약 부모 클래스 또는 구현해야할 인터페이스에서 해당 메소드를 찾을 수 없다면 컴파일 오류가 난다.
  • @Deprecated - 메소드를 사용하지 말도록 유도한다. 만약 사용한다면 컴파일 경고를 일으킨다.
  • @SuppressWarnings - 컴파일 경고를 무시하도록 한다.
  • @SafeVarargs - 제너릭 같은 가변인자 매개변수를 사용할 때 경고를 무시한다. (자바7 이상)
  • @FunctionalInterface - 람다 함수등을 위한 인터페이스를 지정합니다. 메소드가 없거나 두개 이상 되면 컴파일 오류가 난다. (자바 8이상)

 

메타 애노테이션

위에서 본 기본 애노테이션 외에도 메타 애노테이션 들이 있다. 이 메타 애노테이션을 이용해 커스텀 애노테이션을 만들 수 있다.

 

  • @Retention - 애노테이션의 범위라고 할수 있다. 어떤 시점까지 애노테이션이 영향을 미치는지 결정한다.
  • @Target - 애노테이션이 적용할 위치를 결정한다.
  • @Documented - 문서에도 애노테이션의 정보가 표현된다.
  • @Inherited - 이 애노테이션을 선언하면 부모클래스에서 애노테이션을 상속받을 수 있다.
  • @Repeatable - 반복적으로 애노테이션을 선언할 수 있게 한다.

 

커스텀 애노테이션 선언 방법

import java.lang.annotation.*;

@Ingerited
@Documented
@Retention(RetentionPolicy.RUNTIME) // 컴파일 이후에도 JVM에 의해서 참조가 가능하다.
@Target(ElementType.PACKAGE) // 패키지 선언시
public @interface My Annotation {
   ...
   ...
 }

 

 

 

2. @retention

 

애노테이션의 범위라고 할 수 있다. 어떤 시점까지 애노테이션이 영향을 미치는지 결정한다.

 

@Retention(SOURCE) 애노테이션이 소스 코드에만 이용 가능하며 컴파일 후에는 사라진다.
@Retention(CLASS) 애노테이션이 .class 파일에 존재하지만 런타임에는 사라짐
@Retention(RUNTIME) 애노테이션이 컴파일러와 런타임에 사용 가능

 

 

 

3. @Target

 

애노테이션이 적용할 위치를 결정한다.

 

@Target(ElementType.TYPE) 클래스의 어떤 요소에나 적용 가능, 기본값
@Target(ElementType.FIELD) 클래스의 특정 필드
@Target(ElementType.METHOD) 클래스의 메서드
@Target(ElementType.PARAMETER) 메서드의 피라미터
@Target(ElementType.CONSTRUCTOR) 생성자
@Target(ElementType.LOCAL_VARIABLE) 로컬 변수
@Target(ElementType.ANNOTATION_TYPE) 애노테이션 타입

 

 

 

4. @documened

 

documened 애노테이션을 사용한뒤 내가 java doc 문서 만들면 @documened가 붙은 애노테이션이 문서에 표기된다.

 

intelliJ 에서 javaDoc 만드는 방법

 

 

 

5. 애노테이션 프로세서

 

annotation processor는 자바 컴파일러 플러그인의 일종으로, 애노테이션에 대한 코드베이스를 검사, 수정, 생성하는 역할이다.

애노테이션을 사용하기 위해서는 애노테이션 프로세서가 필요하다.

 

  • 애노테이션 프로세서를 사용한다는 것을 자바 컴파일러가 알고 있는 상태에서 컴파일을 수행한다.
  • 애노테이션 프로세서들이 각자의 역할에 맞게 구현되어 있는 상태에서 실행되지 않은 애노테이션 프로세서를 실행한다.
  • 애노테이션 프로세서 내부에서 애노테이션에 대한 처리를 한다.
  • 자바 컴파일러가 모든 애노테이션 프로세서가 실행 되었는지 검사하고, 모든 애노테이션 프로세서가 실행되지 않았다면 반복한다.

 

 

 

 

 

Reference


hilucky.tistory.com/280

 

[Java] Meta Annotation 메타 어노테이션

메타 어노테이션이란 Java5에 추가된 기능으로 어노테이션을 선언할 때 사용하는 어노테이션 종류 @Target @Retention @Inherited 1. @Target 어노테이션을 어떤 요소에 적용할지 지정 @Target(ElementType.TYPE)..

hilucky.tistory.com

jdm.kr/blog/216

 

자바 어노테이션(Java Annotations) :: JDM's Blog

Annotation 어노테이션Annontion은 잘만 쓰면 정말 유용한 자바의 구문입니다. 기본적인 종류는 몇가지에 한정 되지만 본인의 입맛대로 커스텀 어노테이션Custom Annotation도 만들어낼 수 있습니다. 따라

jdm.kr

elfinlas.github.io/2017/12/14/java-annotation/

 

Java에서 어노테이션(Annotation)이란?

Java에서 어노테이션(Annotation) 이란?자바 개발을 하다 보면 클래스 또는 메서드 또는 변수 앞에 @Override 같은 @ 표시를 많이 봤을 것입니다.이 어노테이션은 JEE5(Java Platform, Enterprise Edition 5)부터 새

elfinlas.github.io

im-recording-of-sw-studies.tistory.com/37

 

annotation processor 란

annotation processor는 자바 컴파일러 플러그인의 일종으로, 어노테이션에 대한 코드베이스를 검사, 수정, 생성하는 역할이다. 어노테이션을 사용하기 위해서는 어노테이션 프로세서가 필요하다. 동

im-recording-of-sw-studies.tistory.com

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30