CompositionLocal을 사용한 로컬 범위 지정 데이터  |  Jetpack Compose  |  Android Developers

CompositionLocal


일반적인 컴포즈 패턴에서, 상태(State)는 루트 컴포즈로부터 하위 컴포즈로 흐른다.

Untitled

Root에 선언된 상태를 깊은 하위계층에 컴포즈까지 전달하는 방법은 복잡하다.

Untitled

@Composable
fun MyApp() {
    // Theme information tends to be defined near the root of the application
		// 테마 정보는 주로 애플리케이션의 루트 근처에서 정의되는 경향이 있음
    val colors = …
}

// Some composable deep in the hierarchy
// 깊은 하위계층의 컴포즈
@Composable
fun SomeTextLabel(labelText: String) {
    Text(
        text = labelText,
        color = // ← 루트에 선언된 color 값을 깊은 하위계층 까지 가져와야됨
    )
}

보통 하위계층의 컴포져블 함수에 데이터를 전달하기 위해서는 composable 함수의 param 으로 명시적으로 전달하는 형태로 함수를 구현한다.

컴포져블 계층이 깊거나, 동일한 param을 여러곳에서 사용하는 경우 CompositionLocal 을 통해서 암묵적으로 데이터를 넘겨줄 수 있다.