728x90
728x90
Annotation의 변화
Java8의 Annoataion
- 제너릭 타입 선언부에 선언이 가능하다.
- 중복해서 사용이 가능하다.
Annoation 다양한 위치에 선언하기
Annotaiton을 다양한 위치에 선언하기 위해서는 @Target을 정의해주어야한다.
@Target(ElementType.TYPE_PARAMETER) // Generic Type으로 선언 가능
@Target(ElementType.TYPE_USE) // Type선언하는 모든 곳에서 사용
public @interface Chicken {
}
- ElementType.TYPE_PARAMETER : 제너릭의 Type parameter에 선언이 가능하게 해준다.
static class FeelsLikeChicken<@Chicken T>{ public static <C> void print(C c){ // 앞에 C는 타입파라미터 } }
- ElementType.TYPE_USE : 어디서든지 사용할 수 있게 해준다.
@Chicken public static void main(@Chicken String[] args) throws @Chicken RuntimeException { List<@Chicken String> names = Arrays.asList("jinseop"); } static class FeelsLikeChicken<@Chicken T>{ public static <C> void print(C c){ // 앞에 C는 타입파라미터 } }
Annoation 다양한 위치에 선언하기
Annotation을 중복으로 사용할 수 있다.
Annoation을 중복해서 사용하기 위해서는 감싸주는 Container Annotation이 필요하다.
@Repeatable()를 사용하여 Container Annotation을 정의해주면 된다.
- Chicken AnnotationRepeatable에 Container Annotation을 value값으로 넣어준 것을 볼 수 있고, value로 String을 받는 것을 알 수 있다.
@Target(ElementType.TYPE_USE) @Retention(RetentionPolicy.RUNTIME) @Repeatable(ChickenContainer.class) public @interface Chicken { String value(); }
- ChikenContainer AnnotationChicken Annotation을 감싸주는 Contatiner Annotation이다.
감싸주는 Contatiner는 항상 Target과 Retention을 감싸는 Annoataion보다 넓게 잡아야한다. @Target(ElementType.TYPE_USE) @ Retention(RetentionPolicy.RUNTIME) public @interface ChickenContainer { Chicken[] value(); }
중복으로 사용한 Annoation 사용하기
@Chicken("양념")
@Chicken("마늘")
@Chicken("후라이드")
public class App {
...
}
중복으로 정의한 Annotaiton을 사용하는 방법은 두가지가 있다.
- 직접 Chicken에 접근하여 사용하기
Chicken[] chickens = App.class.getAnnotationsByType(Chicken.class); Arrays.stream(chickens).forEach(c -> { System.out.println(c.value()); });
- Chicken Container로 접근해서 사용하기
ChickenContainer chickenContainer = App.class.getAnnotation(ChickenContainer.class); Arrays.stream(chickenContainer.value()).forEach(c -> { System.out.println(c.value()); });
728x90
728x90
'Language > Java' 카테고리의 다른 글
Java의 BigInteger를 알아보자. (0) | 2022.03.12 |
---|---|
CompletableFuture로 비동기 프로그래밍 공부하기! (0) | 2022.03.04 |
자바 쓰레드 Callable과 Future (0) | 2022.03.03 |
자바 Excuter로 쓰레드 처리하기 (0) | 2022.03.03 |
자바 쓰레드의 기초 (0) | 2022.03.03 |