서론

Compose Compiler와 Compose Runtime은 Jetpack Compose의 핵심 요소이다.

image.png

위 아키텍처 구조로 나타낼 수 있는데, 여기서 Compose UI는 아키텍처의 구성요소는 아니다.

Runtime과 Compiler는 어떤 클라이언트 라이브러리 (CMP)에서든 활용 가능하도록 디자인되어있으며, UI는 단순히 이를 활용하는 클라이언트 라이브러리일 뿐이다


01. Compose 컴파일러

Jetpack Compose는 $composer를 통해 변환되는 코드 생성에 의존한다.

kapt를 활용하는 일반적인 Kotlin/JVM과는 달리 Compose 컴파일러를 통해 컴파일 단계 내에서 진행되는 작업을 할 수 있게 한다.

Compose 컴파일러는 Kotlin 컴파일러 플러그인이다.

Kotlin 컴파일러 플러그인은 컴파일러의 FE단계에서 진단을 보고하는 기능과 함께 빠른 피드백 루프를 제공한다.

또한, 기존 소스를 개발자가 정적 분석하여 중간단계 IR과정의 소스코드를 수정할 수 있으며, 지원하는 플랫폼의 요소로 변환할 수 있다.

<aside> 💡

Compose Compiler는 Kotlin Compiler Plugin이기 때문에 기타 어노테이션 프로세서의 사용과는 달리 컴파일 FE 단계에서 부터 빠른 동작과 피드백을 받을 수 있다.

</aside>


02. Compose 어노테이션들

Compose 컴파일러는 Kotlin 컴파일러의 후크와 확장점을 활용해 강제하고 있는 제약들이 충족되는지, Composable 함수가 일반함수와 다르게 가져야하는 특징들을 잘 처리하고 있는지 확인한다.

또한, 특정 상황에서 추가적인 검사와 다양한 런타임 최적화 또는 숏컷을 활성화하기 위해 어노테이션들을 사용할 수 있으며, Compose Runtime 라이브러리에 의해 제공된다.