Compose 상태 관리(1)

햄햄·2022년 5월 30일
0

Compose

목록 보기
3/7
post-thumbnail

상태 및 Composition

Compose는 선언적이므로 업데이트하는 유일한 방법은 새 argument로 동일한 composable을 호출하는 것 입니다. argument는 UI 상태를 표현하고, 상태가 업데이트 될 때마다 recomposition이 실행됩니다.

Composable의 상태

composable 함수는 remember composable을 사용해 메모리에 단일 객체를 저장할 수 있습니다.
remember를 통해 초기 composition에 저장하고, 저장된 값은 recomposition에 반환됩니다.
mutableStateOf는 observable한 MutableState<T>를 생성하고, 이는 Compose 런타임 시 observable한 type으로 통합됩니다.

interface MutableState<T> : State<T> {
    override var value: T
}

value가 변경되면 value를 읽는 구성 가능한 함수의 리컴포지션이 예약됩니다. ExpandingCard의 경우 expanded가 변경될 때마다 ExpandingCard가 recomposition됩니다.
다음과 같은 방법으로 MutableState 객체를 선언할 수 있습니다.

  • val mutableState = remember { mutableStateOf(default) }
  • var value by remember { mutableStateOf(default) }
  • val (value, setValue) = remember { mutableStateOf(default) }

remember는 recomposition 과정 전반에서 상태를 유지하는데 도움은 되지만 configuration change에서는 상태가 유지되지 않습니다. configuration change에서도 상태를 유지하고 싶다면 rememberSaveable를 사용해야합니다.

상태를 저장하기 위해 지원되는 다른 유형

Jetpack Compose에서는 상태를 저장하기 위해 MutableState<T>를 사용할 필요 없이 일반적으로 사용되던 다른 observable type도 지원합니다.
Jetpack Compose에서 observable type을 읽으려면 상태를 State<T>로 변환해야 합니다. 그래야 상태가 변할 때 Jetpack Compose가 자동으로 recomposition됩니다.
Compose에는 Android에서 일반적으로 사용되는 observable type에서 State<T>를 만들 수 있는 함수가 내장되어 있습니다.

  • LiveData
  • Flow
  • RxJava

0개의 댓글