DevelopmentTools/Java
[programmers-java 중급] 어노테이션(Annotation)
수짱수짱
2022. 7. 18. 03:55
<어노테이션>
Java5에서 추가된 기능
- 어노테이션 (Annotation)
- 클래스 or 메소드 위에 붙여 사용 Ex) @Override
- 소스코드에 메타코드(추가정보)를 주는 것
- 클래스가 컴파일되거나 실행될 때 어노테이션의 유무나 어노테이션의 설정 값을 통하여 클래스가 다르게 실행될 수 있다.
- 위의 이유로 어노테이션을 설정파일처럼 설명하는 경우도 존재
- 자바가 직접 제공하는 어노테이션과 사용자가 직접 생성하는 어노테이션이 존재
- 제공되어지는 어노테이션을 이용하는 경우가 더 많을 것
- 사용자가 직접 생성하는 어노테이션: Custom 어노테이션
- 커스텀 어노테이션을 이용하는 방법
- 1. 어노테이션 정의
- 패키지 익스플로러 - new - Annotation
- 정의한 어노테이션을 JVM 실행시에 감지할 수 있도록 @Retention(RetentionPolicy.RUNTIME)을 붙여 주어야 한다.
- 2. 어노테이션을 클래스에서 사용 (타겟에 적용)
- 사용할 클래스나 메소드 위에 @어노테이션이름 을 붙여준다.
- 3. 어노테이션을 이용하여 실행
- 1. 어노테이션 정의
- 커스텀 어노테이션을 이용하는 방법
1. 어노테이션 정의
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface Count100 {
}
2. 어노테이션을 클래스에서 사용 (타겟에 적용)
public class MyHello {
@Count100
public void hello(){
System.out.println("hello");
}
}
3. 어노테이션을 이용하여 실행
public class MyHelloExam { // MyHello가 사용되는 클래스 정의
public static void main(String[] args){
MyHello hello = new MyHello(); // MyHello 객체 생성
try{
Method method = hello.getClass().getDeclaredMethod("hello"); // 메소드에 대한 정보를 알아보자.
// getClass는 Object 클래스가 가진 메소드. 해당 객체를 만들 때 사용한 class의 정보를 return하는 메소드
// getDeclaredMethod는 클래스에 대한 정보를 얻고 그 정보로 부터 hello라는 이름의 메소드에 대한 정보를 return. 예외 처리가 필요한 메소드
// 즉, method 객체는 hello에 대한 정보를 가진 것이다.
if(method.isAnnotationPresent(Count100.class)){
// isAnnotationPresent 메소드는 특정 어노테이션이 메소드에 적용되어 있는지 확인한다.
// 즉, Count100이라는 어노테이션을 적용하고 있는가에 대한 정보를 얻고 적용되어 있다면 true를 반환한다.
for(int i=0; i<100; i++) hello.hello(); // hello가 가진 hello라는 메소드를 100번 호출
}
else{
hello.hello();
}
}
catch(Exception e){ // 여러개 발생할 수 있는 예외를 Exception으로 한 번에 처리한다.
e.printStackTrace();
}
}
}