개요

지금까지 어떤 함수를 호출하려면 그 함수가 정의된 클래스의 이름과 함수 이름, 파라미터 이름 등을 알아야만 했다. 애노테이션(annotation)과 리플렉션(reflection)을 사용하면 그런 제약을 벗어나서 미리 알지 못하는 임의의 클래스를 다룰 수 있다.

애노테이션을 사용하면 라이브러리가 요구하는 의미를 클래스에게 부여할 수 있고, 리플렉션을 사용하면 실행 시점에 컴파일러가 내부 구조를 분석할 수 있다.

애노테이션을 적용하기는 쉽다. 하지만 애노테이션을 직접 만들기는 어렵고, 특히 애노테이션을 처리하는 코드를 작성하기는 더 어렵다.

애노테이션과 리플렉션의 사용법을 보여주는 예제로 10장에서는 실전 프로젝트에 준하는 JSON 직렬화와 역질렬화 라이브러리인 제이키드(JKid)를 구현한다. 이 라이브러리는 실행 시점에 코틀린 객체의 프로퍼티를 읽거나 JSON 파일에서 읽은 데이터를 코틀린 객체로 만들기 위해 리플렉션을 사용한다. 그리고 애노테이션을 통해 제이키드 라이브러리가 클래스와 프로퍼티를 직렬화하고 역질렬화하는 방식을 변경한다.

10.1 애노테이션 선언과 적용

10.2 리플렉션: 실행 시점에 코틀린 객체 내부 관찰