[인프런 워밍업 스터디 클럽] 1기 백엔드 2일차 과제

[인프런 워밍업 스터디 클럽] 1기 백엔드 2일차 과제

어노테이션 사용하는 이유

어노테이션은 사용 용도로 3가지가 있습니다.
1. 컴파일 시 사용하는 정보 전달
2. 빌드 툴이 코드를 자동으로 생성할 때 사용하는 정보 전달
3.실행 시 특정 기능을 처리할 때 사용하는 정보 전달

컴파일 시 사용하는 정보 전달의 대표적인 예는 @Override 어노테이션입니다.

컴파일러가 메소드 재정의 검사를하도록 설정합니다. 재정의되지 않았다면 컴파일러는 에러를 발생시킵니다.

웹 개발에 많이 사용하는 Spring Framework 또는 Spring Boot는 다양한 종류의 어노테이션을 사용해서 웹 애플리케이션을 설정하는데 사용합니다.

나만의 어노테이션은 어떻게 만들 수 있을까?

 

어노테이션을 정의하는 방법은 인터페이스를 정의하는것과 유사합니다.

@interface 뒤에 사용할 어노테이션을 이름을 정의합니다.

오노테이션은 속성을 가질 수 있으며, 속성은 타입과 이름으로 구성됩니다. 속성은 기본값 default 키워드로 지정할 수 있습니다.

어떤 대상에 설정 정보를 적용할 것인지, 적용대상을 정의 해야 합니다.

클래스 명위에 @Target 어노테이션을 붙어 정의 합니다.
적용할 수 있는 대상의 종류는 ElememtType 열거 상수로 정의되어 있습니다.
TYPE : 클래스, 인터페이스 열거타입
ANOTATION_TYPE: 어노테이션
FIELD: 필드
CONSTERUCTOR: 생성자
METHOD: 메서드
LOCAL_VARIABLE: 로컬 변수

 

예시

어노테이션 정의

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PrintAnnotation {
	String value() default "-";
	int number() default 15;
}

서비스 어노테이션 적용

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");
    }
}

 

실행 코드

public class PrintAnnotationExample {
    public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {
       Method[] declaredMethods = Service.class.getDeclaredMethods();
       for (Method method : declaredMethods) {
          PrintAnnotation printAnnotation = method.getAnnotation(PrintAnnotation.class);

          printList(printAnnotation);

          method.invoke(new Service());

          printList(printAnnotation);
       }
    }

    public static void printList(PrintAnnotation printAnnotation) {
       if (printAnnotation != null) {
          int number = printAnnotation.number();
          for (int i = 0; i < number; i++) {
             String value = printAnnotation.value();
             System.out.print(value);
          }
          System.out.println();
       }
    }
}

 

출력 내용

image

댓글을 작성해보세요.