지금까지 어떤 함수를 호출하려면 그 함수가 정의된 클래스의 이름과 함수 이름, 파라미터 이름 등을 알아야만 했다. 애노테이션(annotation)과 리플렉션(reflection)을 사용하면 그런 제약을 벗어나서 미리 알지 못하는 임의의 클래스를 다룰 수 있다.
애노테이션을 사용하면 라이브러리가 요구하는 의미를 클래스에게 부여할 수 있고, 리플렉션을 사용하면 실행 시점에 컴파일러가 내부 구조를 분석할 수 있다.
애노테이션을 적용하기는 쉽다. 하지만 애노테이션을 직접 만들기는 어렵고, 특히 애노테이션을 처리하는 코드를 작성하기는 더 어렵다.
애노테이션과 리플렉션의 사용법을 보여주는 예제로 10장에서는 실전 프로젝트에 준하는 JSON 직렬화와 역질렬화 라이브러리인 제이키드(JKid)를 구현한다. 이 라이브러리는 실행 시점에 코틀린 객체의 프로퍼티를 읽거나 JSON 파일에서 읽은 데이터를 코틀린 객체로 만들기 위해 리플렉션을 사용한다. 그리고 애노테이션을 통해 제이키드 라이브러리가 클래스와 프로퍼티를 직렬화하고 역질렬화하는 방식을 변경한다.