기술 블로그

어노테이션(Annotation) 본문

JAVA

어노테이션(Annotation)

parkit 2020. 6. 7. 23:37
728x90
반응형

● 어노테이션


• 프로그램에게 추가적인 정보를 제공해주는 메타데이터이다.


Java 5부터 추가된 기능


클래스나 메소드 위에 붙여 사용 ex) @Override


소스코드에 메타코드(추가정보)를 주는 것


사용자가 직접 정의해서 사용 가능(커스텀 어노테이션)



 

어노테이션 용도

 

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

ex) 메소드가 재정의 되어있는지 확인할 수 있다.(@Override)

 

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

ex) XML 설정 파일을 자동 생성하거나 배포를 위한 Jar 압축 파일을 자동 생성할 수 있다.

 

• 실행 시(런타임 시) 특정 기능을 실행하도록 정보를 제공

ex) 객체가 애플리케이션 내부에서 해야할 역할을 정의할 수 있다.(서블릿, 컨트롤러, …)






Count100.java(Annotation)

1
2
3
4
5
6
7
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
 
@Retention(RetentionPolicy.RUNTIME) // 입력 필수
public @interface Count100 {
    
}
cs





MyHello.java(Class)

1
2
3
4
5
6
7
public class MyHello {
    
    @Count100
    public void hello() {
        System.out.println("hello");
    }
}
cs





MyHelloExam.java(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
import java.lang.reflect.Method;
 
public class MyHelloExam {
 
    public static void main(String[] args) {
        MyHello hello = new MyHello();
        
        /* getClass() : 해당 인스턴스를 만들 때, 사용한 Class의 정보를 return
         * getDeclaredMethod() : getClass()로부터 얻은 Class의 정보로부터 hello라는 이름의 메소드에 대한 정보를 구해라.
         */
        
        try {
            Method method = hello.getClass().getDeclaredMethod("hello");
            
            // Count100이라는 어노테이션이 적용되어 있는지?
            if(method.isAnnotationPresent(Count100.class)) {
                for(int i=0; i<100; i++) {
                    hello.hello();
                }
            }
            else {
                hello.hello();
            }
        } 
        catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
cs








728x90
반응형