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
반응형