[인프런 워밍업 스터디 클럽] 1기 백엔드 2일차 과제
6개월 전
어노테이션 사용하는 이유
어노테이션은 사용 용도로 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();
}
}
}
출력 내용
댓글을 작성해보세요.