Jetpack Compose Internals 책을 읽고, 몰랐던 내용을 정리하고, 책에 언급된 내용에 대한 딥다이브 및 스터디 시간에 얘기 나누면 좋을 내용들을 적어보는 글입니다.

Composer를 통해 Compose Runtime이 관리하는 메모리 내 구조(slot table)에 변경사항을 '방출(emit)' 한다.
Composer가 slot table에 변경사항을 기록한다고 해석하면 될듯하다.
이 표현(representation)은 나중에 '해석'되어 실제 UI로 '구체화(materialize)'된다.
해석 및 구체화는 Applier가 담당을 하는데 이는 이후에 살펴보도록 하겠다.
트리 구조의 메모리 내 데이터 구조로, Composition의 현재 상태를 저장한다. Gap buffer 방식으로 구현되어 있어 삽입/삭제가 효율적이다.
Composer는 사이드 이펙트도 기록할 수 있다. 사이드 이펙트는 항상 Composition 이후에 실행된다.
Composition 단계는 순수해야 하므로 외부 상태 변경이나 비동기 작업은 별도 단계에서 처리된다. Composer는 사이드 이펙트를 큐에 저장했다가 Composition이 완료된 후 apply 단계에서 실행한다.
Composer는 CompositionLocals를 등록하고 키를 통해 해당 값을 획득하는 방법을 제공한다.
CompositionLocal.current 호출은 이에 의존한다.
CompositionLocals의 공급자와 공급되는 값은 모두 Slot Table에 그룹의 형태로 저장된다.
Slot table의 변경사항을 실제 UI 트리에 반영하는 역할을 한다.
Composition의 추상적 표현을 구체적인 UI로 변환하는 브리지 역할
Composition의 생명주기를 관리하고 State 변경을 감지하여 Recomposition을 트리거한다.
Recomposer는 CoroutineContext를 가지고 있어 Composition을 비동기적으로 관리한다.