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 |
결과
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
SpringBootServletInitializer는 왜 사용하는것일까? (0) | 2022.01.03 |
---|---|
JAVA Singleton(싱글톤) (0) | 2018.11.05 |