JAVA Annotation(어노테이션)

2018. 11. 5. 18:06프로그래밍 언어/JAVA

JAVA Annotation(어노테이션)


어노테이션은 메타데이터라고 볼수 있습니다.

※ 메타데이터? : 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할 것인지 알려주는 정보


어노테이션 용도

1. 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공

2. 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동으로 생성할 수 있도록 정보를 제공

3. 실행시 특정 기능을 실행하도록 정보를 제공


PrintAnnotation.class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package annotation;
 
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface PrintAnnotation {
    String value() default "-";
    int number() default 15;
}
 
cs


Service.class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package annotation;
 
public class Service {
    @PrintAnnotation
    public void method1() {
        System.out.println("실행 내용1");
    }
    
    @PrintAnnotation("*")
    public void method2() {
        System.out.println("실행 내용2");
    }
    
    @PrintAnnotation(value="#", number=20)
    public void method3() {
        System.out.println("실행 내용3");
    }
}
 
cs



PrintAnnotationExample.class

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
31
32
33
34
35
36
37
package annotation;
 
import java.lang.reflect.Method;
 
public class PrintAnnotationExample {
    public static void main(String[] args) {
        // Service 클래스로 부터 메소드 정보를 얻음
        Method[] declaredMethods = Service.class.getDeclaredMethods(); // Service 클래스에 선언된 메소드 얻기(리플렉션)
 
        // Method 객체를 하나씩 처리
        for (Method method : declaredMethods) {
            // PrintAnnotaion이 적용되었는지 확인
            if (method.isAnnotationPresent(PrintAnnotation.class)) {
 
                // PrintAnnotation 객체 얻기
                PrintAnnotation printAnnotation = method.getAnnotation(PrintAnnotation.class);
 
                // 메소드 이름출력
                System.out.println("[" + method.getName() + "]");
 
                for (int i = 0; i < printAnnotation.number(); i++) {
                    System.out.print(printAnnotation.value());
                }
                System.out.println();
 
                try {
                    // 메소드 호출(실행내용)
                    method.invoke(new Service());
                } catch (Exception e) {
                    e.printStackTrace();
                }
                System.out.println();
            }
        }
    }
}
 
cs


결과