<aside> 📑 참고자료 : KOTLIN IN ACTION
</aside>
어떤 함수를 호출하려면 그 함수가 정의된 클래스의 이름과 함수 이름, 파라미터 이를 등을 알아야만 했다. 애노테이션annotation과 리플랙션reflection을 사용하면 미리 알지 못하는 임의의 클래스를 다룰 수 있다.
애노테이션을 사용하면 라이브러리가 요구하는 의미를 클래스에게 봉할 수 있고, 리플랙션을 사용하면 실행 시점에 컴파일러 내부 구조를 분석할 수 있다.
코틀린의 한 선언이 여러 자바 선언과 대응하는 경우가 있다. 따라서 애노테이션을 붙일 때 이런 요소 중 어떤 요소에 애노테이션을 불일지 표시할 필요가 있다!
ex) 코틀린 프로퍼티 = 자바의 필드 + 게터+(변경 가능하다면)세터
사용 지점 대상 use-site target 선언
@ 기호과 애노테이션이름 사이에 불으며, 애노테이션 이름과는 콜론(:)으로 분리된다.
@get:Rule // @사용 지점 대상 : 애노테이션 이름
class HasTempFolder{
~~@Rule~~
**@get:Rule //@Rule을 붙이면 folder는 공개필드여야 한다는 오류가 남.**
val folder = TemporaryFolder()
@Test
fun testUsingTemporayFolder(){
val createdFile=folder.newFile("myFile.txt")
val createdFolder=folder.newFolder("myFolder.txt")
}
*}*
자바에 선언되 애노테이션을 사용해 프로퍼티에 애노테이션을 붙이는 경우 기본적으로 프로퍼티의 필드에 그 애노테이션이 붙는다. 위처럼 직접 지정도 가능
애노테이션을 사용하는 고전적인 예제로 객체 직렬화 제어를 들 수 있다.
직렬화serialization ****객체를 저장장치에 저장하거나 네트워크를 통해 전송하기 위해 텍스트나 이진 형식으로 변환 역직렬화deserialization ****텍스트나 이진 형식으로 저장된 데이터로부터 원래의 객체를 만들어낸다.
→직렬화에 자주 쓰이는 형식 JSON ::