진짜 개발자
본문 바로가기

Language/Java

Java - Annotation 이란? Annotation 사용법

728x90
Annotation

Annotation 에 대해서 알아보도록하겠습니다.

 

Annotation

- Java 5부터 추가된 기능입니다.

- 클래스 또는 메소드 그리고 변수 등에 붙여서 사용됩니다.

- 소스코드에 메타코드를 주는 것.

위에서 설명드린 내용은 프로그래머스의 자바 중급강좌에서 발췌한 내용입니다.

 

처음 어노테이션을 블로그나 구글링을 통해 알아보았을때는 이해력이 부족해서인지, 저는 잘 이해가 가질 않았습니다. 예제와 함께 설명드리겠습니다.

 


1. Annotation 생성

우선 간단히 Annotation을 생성하겠습니다. Interface를 생성하고 interface 키워드 앞에 @를 붙혀주면 됩니다. 정의한 Annotation의 의미는 100번 반복하라입니다. 따라서 이 어노테이션이 부여된 메소드는 100번을 반복하라는 의미를 가지게 됩니다. 



2. 부여할 class 생성

hello라는 메시지를 출력하는 메소드를 가진 Hello class를 생성했습니다. 주목할 점은 hello라는 메소드위에 우리가 작성한 @DoRepeat100 어노테이션이 부여되어있는 것 입니다.

 


3. Annotation 처리 Class 생성

이제 위의 코드를 보시면 어떤식으로 어노테이션이 사용되는지 간단하게나마 감을 잡으실 수 있을 것같습니다. 굳이 설명을 드리자면 java의 reflection의 기술을 이용해 Class의 메소드정보를 추출해온뒤 해당 메소드에 annotation이 부여되어있다면 그것에 따라 if문으로 분기하여 처리를했습니다.

 


4. Retention

retention은 해당 어노테이션이 언제까지 유효한지를 정해줄 수 있는 옵션입니다.  크게 SOURCE, CLASS, RUNTIME 세가지가 존재합니다. 아무런 설정을 하지 않는 경우 CLASS가 기본값입니다.

SOURCE
source의 경우에는 compiler에 의해서 사라지는 어노테이션입니다. 즉 source상에서만 확인가능한 어노테이션입니다. 거의 주석느낌으로 이해하셔도 됩니다.

CLASS
class는 compiler에 의해 CLASS 파일에 저장은 되지만, VM에 의해 실행시에는 유지될 필요 없는 경우 사용합니다. 즉, RUNTIME시에는 존재하지 않도록 합니다.

RUNTIME

vm에 의해 class파일이 실행될 시점인 RUNTIME에도 주석이 유효하도록 합니다.



5. Target

우리의 어노테이션이 부여될 위치를 지정할 수 있는 어노테이션입니다. 앞선 예제에 Target을 적용해보도록 하겠습니다.

 

앞서 생성했던 @DoRepeat100 어노테이션에 위와 같이 @Target(value = ElementType.METHOD)어노테이션을 추가적으로 부여했습니다. METHOD에만 적용이 가능하다는 의미입니다. 확인해보죠.

 

Class 위에 해당 어노테이션을 부여했더니 빨간줄이 그어지며 컴파일 에러가 발생합니다.