2022 성빈랜드 발표회에서 진행된 강연 자료를 공개합니다.
---
# 컴포즈 내부로 이해하는 최적화 비법
### 타이틀
안녕하세요, 저는 “컴포즈 내부로 이해하는 최적화 비법” 라는 주제로 발표할 지성빈 입니다.
### 소개
저는 안드로이드 개발을 시작한지는 약 8년정도 됐으며 덕키 프로젝트의 리드를 담당하고 있습니다.
### 목차
이번 발표는 컴포즈의 기본적인 내부 동작 원리를 살펴보면서 이를 응용하여 최적화 하는 비법들에 대해 소개하려고 합니다. 목차는 Node System, Compose UI, Snapshot System, Compose Compiler, 마지막 마무리로 준비했습니다.
### 목차로부터 알 수 있는 점
이 목차에서도 새로운 정보를 알 수 있습니다. Node System, Snapshot System 그리고 Compose Compiler 를 합친 영역을 Compose Runtime 이라고 부르고, 이 Compose Runtime 과 Compose UI 를 더하면 최종적으로 Jetpack Compose 가 됩니다.
Jetpack Compose 는 Rumtime 과 UI 가 더해진 최종 상태라는 것만 알아두시면 됩니다.
### 시작하기 전에
본격적으로 발표를 시작하기 전에, 컴포즈 버전은 1.3.0 버전을 기준으로 준비했으며 빠른 이해를 위해 이 발표에서 소개할 개념들의 세부 사항은 생략하였습니다.
### Node System
이제, Compose Runtime 의 뼈대인 Node System 을 먼저 알아보는 것으로 시작하겠습니다.
### Node - 1
간단하게 3개의 Text 를 표시하는 컴포저블이 있습니다. 이 컴포저블은 그려지기 위해 오른쪽처럼 UI Tree 로 렌더링됩니다.
### Node - 2
렌더링된 UI Tree 의 각각 노드들은 Compose Runtime 에서 Ui Node 라는 타입으로 관리됩니다. 이렇듯, 결국 모든 컴포저블은 Compose Runtime 에서 노드로 처리되고, 이러한 시스템을 Node System 이라고 부릅니다.
### Compose Runtime & Compose UI
Compose Runtime 과 Compose UI 를 쉽게 나타내자면 Compose Runtime 은 Node interface 를 나타내고, Compose UI 는 해당 노드를 실제로 구현한 Node implementation 이라고 할 수 있습니다.
### SlotTable
Compose Runtime 에서 생성되는 Node 들의 데이터는 SlotTable 에서 관리됩니다. SlotTable 은 갭 버퍼와 랜덤 액새스를 이용하여 선형 배열에 모든 데이터를 저장하고 관리하는 클래스 입니다.
### Gap Buffer
대부분 갭 버퍼에 대해 생소하실 거 같아 간단하게 Gap Buffer 를 소개하겠습니다. 텍스트 에디터를 생각해 봅시다. 입력되는 텍스트가 일반 선형 ...