본문 바로가기

AdvancedJava

[3일차] 어노테이션

메타데이터.



임의로 어노테이션을 만들 수 있다. 


두가지를 정해야한다. 



retention 과 target




retention은 이 정보를 어디까지 가지고 갈것인가. 



1. source 타입, 

2. class 타입

3. runtime 타입 메모리 로딩할때, 같이 로딩해서 실시간으로 가지고 있는다. 




 ex:) 메모리 로딩할때까지 가져갈 수도있고, 프로그램 실행중에도 계속 가지고 있을 수있다. 



@target({엘리먼트 타입.type,ElementType.METHOD})

@Rentention



근데 거의 오픈소스를 많이 씀. 라이브러리에서 그런게 많음.


이러한 어노테이션 정보를 읽을 수 있는 기술을 Reflect라고 한다. 


 - 동적으로 이름을 이용해서 java class를 다루는 방법.
 - java class 의 이름을 이용하여 class를 메모리에 불러와서 class 객체를 생성.
 - class의 method나 filed를 이름과 signature를 이용하여 획득한 다음, 함수 호출 또는 값의 설정 및 획득.


바이너리 형태를 class객체를 만들어준다. 
class 의 new Instance()함수를 이용해 객체를 생성

생성자를 잉요해 getConstructor()를 이용해.
ClassLoader를 이용해서 메모리에 class를 메모리에 로딩하는거다. 

메소드클래스는 getMethod()를 호출하여 획득.

invoke()로 함수 호출.


지금 설명하는거는 이렇구나 하는 정도로만 알아두자. 다룰일은 거의 없다. 


어노테이션을 처리하기 위해 알아야 하는 기본지식 정도이다. 

음 정확하게 이게 뭘 얻으려고 하는지 .. 개념이 분명치 않다. 

클래스에 어노테이션이 정의 되어있으면, class의 getAnotation()으로 얻어올 수 있다. 

없으면 null.


Proxy class


interface를 implements한 class나 객체를 동적으로 생성해 주기 위한 class


어노테이션 체크하는 방법

검색해서 한번 해보는거다,

메소드에 정의된 어노테이션 m.isAnnotationPresect(Check...)

그 다음은 어노테이션 실습...