Closed ForteEscape closed 1 week ago
배열 방식과 @Repeatable
어노테이션을 비교하기 위해 둘의 예시를 들어보겠습니다.
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ExceptionTest {
Class<? extends Throwable>[] value();
}
@ExceptionTest({IllegalArgumentException.class, NullPointerException.class})
public void someTest() {
// 테스트 코드
}
[장점]
[단점]
@Repeatable
어노테이션
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface ExceptionTests { ExceptionTest[] value(); }
* 기본 애너테이션 정의
```java
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Repeatable(ExceptionTests.class)
public @interface ExceptionTest {
Class<? extends Throwable> value();
}
@ExceptionTest(IllegalArgumentException.class)
@ExceptionTest(NullPointerException.class)
public void someTest() {
// 테스트 코드
}
[장점]
[단점]
따라서 단순한 값의 집합을 처리할 때는 배열을 사용하는 것이 더 간편하고 직관적입니다.
하지만 각각의 애너테이션 인스턴스에 대한 유연성과 가독성이 중요할 때는 @Repeatable
을 사용하는 것이 더 적합합니다.
Q. 책(p. 243)에서는 다음과 같이 설명하고 있습니다.
질문은 다음과 같습니다.
@Repeatable
어노테이션을 사용하여 구현한 방식이 배열을 사용한 방식보다 더 복잡하고, 유의할 점이 많아 보입니다. 이것이 책에서 배열을 사용하여 구현하는 방식에서 유의할 점을 생략해서 그런 것인지가 궁금합니다.@Repeatable
메타어노테이션을 사용하여 얻을 수 있는 이득이 무었인지 궁금합니다.