변경 사항 적용하기
Composer는 이 추상화 작업을 Applier에 위임하여 composition 이후에 기록된 모든 변경 사항을 적용한다.
이러한 동작을 구체화라고 하며, 이 프로세스는 변경 사항 목록을 실행하고 슬롯 테이블을 업데이트한다.
런타임은 이 Applier의 구현체와는 독립적이다.
이는 클라이언트단의 라이브러리를 통해 구현하기 위한 API에 의존한다.
Applier는 플랫폼과의 통합점과 같으므로, 유즈케이스에 따라 인터페이스의 구현체가 달라질 수 있다.
Applier 인터페이스의 명세는 아래와 같다.
interface Applier<N> {
val current: N
fun onBeginChanges() {}
fun onEndChanges() {}
fun down(node: N)
fun up()
fun insertTopDown(index: Int, instance: N)
fun insertBottomUp(index: Int, instance: N)
fun remove(index: Int, count: Int)
fun move(from: Int, to: Int, count: Int)
fun clear()
}
인터페이스 선언문의 N 제네릭 타입의 매개변수는 적용하고자 하는 노드의 타입을 결정한다.
이것이 Composer가 제네릭 호출 그래프 또는 노드 트리와 함께 동작하는 기반이 된다.
Applier는 트리를 탐색하고 노드를 삽입, 제거 또는 이동하는 작업을 하지만, 해당 노드의 타입이나 최종적으로 어떻게 삽입되는지 까지는 관여하지 않는다.
또한 Applier 명세는 현재 노드에서 지정된 범위의 모든 하위 항목을 제거하거나 현재 노드의 하위 항목을 이동시키고 위치를 변경하는 방법을 정의한다.
clear 작업은 루트를 가리키고 트리에서 모든 노드를 제거하는 방법과 Applier와 해당 루트를 향후 새 composition에 사용할 준비를 한다.
그리고 거듭되어 언급되지만 Applier는 모든 노드를 방문하고 적용하면서 전체 트리를 순회한다.
Applier는 방문하고 변경 사항을 적용하는 현재 노드에 대한 참조를 유지하는데 여기에는 Composer가 변경 사항을 적용하기 시작하고 끝날 때 호출하는 onBeingChanges()와 onEndChanges() 함수를 호출하며, 상단 → 하단 혹은 하단 → 상단으로 노드를 삽입 및 이동하는 insertTopDown(), insertBottomUp(), up(), down() 함수를 제공한다.
'Android' 카테고리의 다른 글
[Android] Compose 런타임 - (9) (0) | 2024.12.05 |
---|---|
[Android] Compose 런타임 - (8) (0) | 2024.12.04 |
[Android] Compose 런타임 - (6) (0) | 2024.12.02 |
[Android] Compose 런타임 - (5) (0) | 2024.11.29 |
[Android] Compose 런타임 - (4) (0) | 2024.11.28 |