Annotation 에 대해서 알아보도록하겠습니다.
Annotation
- Java 5부터 추가된 기능입니다.
- 클래스 또는 메소드 그리고 변수 등에 붙여서 사용됩니다.
- 소스코드에 메타코드를 주는 것.
위에서 설명드린 내용은 프로그래머스의 자바 중급강좌에서 발췌한 내용입니다.
처음 어노테이션을 블로그나 구글링을 통해 알아보았을때는 이해력이 부족해서인지, 저는 잘 이해가 가질 않았습니다. 예제와 함께 설명드리겠습니다.
1. Annotation 생성
xxxxxxxxxx
public @interface DoRepeat100 {}
우선 간단히 Annotation을 생성하겠습니다. Interface를 생성하고 interface 키워드 앞에 @
를 붙혀주면 됩니다. 정의한 Annotation의 의미는 100번 반복하라
입니다. 따라서 이 어노테이션이 부여된 메소드는 100번을 반복하라는 의미를 가지게 됩니다.
2. 부여할 class 생성
public class Hello {
public void hello(){
System.out.println("hello !");
}
}
hello라는 메시지를 출력하는 메소드를 가진 Hello class를 생성했습니다. 주목할 점은 hello라는 메소드위에 우리가 작성한 @DoRepeat100
어노테이션이 부여되어있는 것 입니다.
3. Annotation 처리 Class 생성
public class Main {
public static void main(String[] args) {
Hello hello = new Hello();
try{
Method method = hello.getClass().getDeclaredMethod("hello");
System.out.println("어노테이션이 존재합니다.");
if (method.isAnnotationPresent(DoRepeat100.class)){
for (int i = 0; i < 100; i++)
hello.hello();
}
else{
System.out.println("어노테이션이 존재하지 않습니다.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
이제 위의 코드를 보시면 어떤식으로 어노테이션이 사용되는지 간단하게나마 감을 잡으실 수 있을 것같습니다. 굳이 설명을 드리자면 java의 reflection의 기술을 이용해 Class의 메소드정보를 추출해온뒤 해당 메소드에 annotation이 부여되어있다면 그것에 따라 if문으로 분기하여 처리를했습니다.
4. Retention
vm에 의해 class파일이 실행될 시점인 RUNTIME에도 주석이 유효하도록 합니다.
5. Target
우리의 어노테이션이 부여될 위치를 지정할 수 있는 어노테이션입니다. 앞선 예제에 Target을 적용해보도록 하겠습니다.
x
(value = RetentionPolicy.RUNTIME)
(value = ElementType.METHOD)
public @interface DoRepeat100 {}
앞서 생성했던 @DoRepeat100
어노테이션에 위와 같이 @Target(value = ElementType.METHOD)
어노테이션을 추가적으로 부여했습니다. METHOD에만 적용이 가능하다는 의미입니다. 확인해보죠.
Class 위에 해당 어노테이션을 부여했더니 빨간줄이 그어지며 컴파일 에러가 발생합니다.
'Language > Java' 카테고리의 다른 글
Java - jjwt 사용법 (1) | 2019.07.11 |
---|---|
Java - ArrayList 제거 안되는 문제(Wrapper Class) (0) | 2019.07.02 |
Java - Lambda Expression(람다식)이란? (2) | 2019.04.09 |
Java - Json 과 Gson 이란? (0) | 2019.03.30 |
Java - Eclipse에서 Gradle프로젝트 생성한 뒤 Build 하기 (0) | 2019.03.30 |