250x250
250x250
JinSeopKim
Hello World!
JinSeopKim
전체 방문자
오늘
어제
  • 분류 전체보기 (168)
    • Artificial intelligence (14)
      • DeepDiveToAI (3)
      • Pytorch (3)
      • Etc (8)
    • Back-end (19)
      • Spring (10)
      • JPA (9)
    • Language (24)
      • Python (3)
      • Java (11)
      • Swift (10)
    • Math (4)
      • Linear Algebra (4)
    • CodingTest (79)
      • Algolithm (12)
      • Backjoon (25)
      • Programmers (42)
    • Etc (27)
      • Book Review (3)
      • Adsp (6)
      • Life (2)
      • Docker (1)
      • odds and ends (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • GitHub

인기 글

태그

  • JPA
  • certificate
  • uArm
  • swift
  • 브루트포스
  • DP
  • 프로그래머스
  • 알고리즘
  • Front-end
  • 개발자
  • SpringMVC
  • 개발
  • 문제풀이
  • BOJ
  • 선형대수
  • ADsP
  • 파이썬
  • 자바
  • 코딩테스트
  • ios
  • BFS
  • JAVA8
  • Python
  • 머신러닝
  • AI
  • 카카오
  • java
  • data
  • 구현
  • 백준

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
JinSeopKim

Hello World!

Java8의 Annotation
Language/Java

Java8의 Annotation

2022. 3. 8. 21:04
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을 사용하는 방법은 두가지가 있다.

  1. 직접 Chicken에 접근하여 사용하기
         Chicken[] chickens = App.class.getAnnotationsByType(Chicken.class);
         Arrays.stream(chickens).forEach(c -> {
             System.out.println(c.value());
         });
  2. 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
    'Language/Java' 카테고리의 다른 글
    • Java의 BigInteger를 알아보자.
    • CompletableFuture로 비동기 프로그래밍 공부하기!
    • 자바 쓰레드 Callable과 Future
    • 자바 Excuter로 쓰레드 처리하기
    JinSeopKim
    JinSeopKim
    기록📚

    티스토리툴바