[Compose] Composable Functions

easyhooon·2025년 10월 18일
post-thumbnail

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

책의 내용을 정리할 목적으로 작성하는 글은 아니라, 내용에 대한 정리는 아래 블로그글을 참고하면 도움이 될듯 합니다.

Compose Internals - Composable 함수들

1. Composer

Composer 매개변수의 인스턴스는 런타임에 Composable 함수에 주입되며, 모든 하위 Composable 호출로 전달되므로 트리의 모든 수준에서 접근할 수 있다.

Composer가 트리를 따라 하향 전달되도록 한다고 언급되어있는데, Image 노드는 Row 노드에 상향 전달을 하는거로 그림상 표현되는데, 오타(?)인 것으로 추측된다.

Composer는 개발자가 작성하는 Composable 코드와 Compose Runtime 간의 중재자 역할을 한다. Composable 함수는 트리에 대한 변경 사항을 전달하고, 런타임 시에 트리의 형태를 빌드하거나 업데이트하기 위해 Composer를 사용한다.

2. Column 내에도 key를 지정할 수 있다.

Compose는 key라는 Composable 함수를 제공하여, Composable 함수에게 명시적인 키 값을 지정할 수 있다.

@Composable
fun TalksScreen(talks: List<Talk>) {
  Column {
    for (talk in talks) {
      key(talk.id) { // Unique key
        Talk(talk)
      }
    }
  }
}

이것은 Compose Runtime이 Composable 함수의 위치에 상관없이 리스트에 속한 모든 항목의 정체성을 유지하도록 한다.

/**
 * [key] is a utility composable that is used to "group" or "key" a block of execution inside of a
 * composition. This is sometimes needed for correctness inside of control-flow that may cause a
 * given composable invocation to execute more than once during composition.
 *
 * The value for a key *does not need to be globally unique*, and needs only be unique amongst the
 * invocations of [key] *at that point* in composition.
 */
@Composable
inline fun <T> key(@Suppress("UNUSED_PARAMETER") vararg keys: Any?, block: @Composable () -> T) =
    block()

3. Remember의 대한 정의

remember는 트리의 상태를 유지하는 인메모리 구조에서 값을 메모리에 읽고 쓰는 역할을 수행하는 Composable 함수이다.

profile
실력은 고통의 총합이다. Android Developer

0개의 댓글