Compose의 UI는 변경할 수 없다. UI를 설계한 후 업데이트를 할 수가 없다. 하지만 UI 상태는 제어할 수 있다. UI 상태가 변경될 때마다 Compose는 변경된 UI 트리 부분을 다시 만든다.(리컴퍼저블) 이때 컴퍼저블은 상태를 수락하고 이벤트를 노출할 수 있다.

예를 들어 TextField는 값을 수락 하고 onValueChange를 노출한다. 이 콜백은 값을 변경하기 위해 콜백 핸들러를 요청한다.

var name by remember { mutableStateOf("") }
OutlinedTextField(
    value = name,
    onValueChange = { name = it },
    label = { Text("Name") }
)

컴포저블이 상태를 수락하고 이벤트를 노출하기 때문에 단방향 데이터 흐름 패턴은 Jetpack Compose에 적합 하다.

단방향 데이터 흐름

단방향 데이터 흐름(UDF)은 상태는 아래로 이동하고 이벤트는 위로 이동하는 디자인 패턴

Untitled

단방향 데이터 흐름을 따라 UI에 상태를 표시하는 컴포저블과 상태를 저장하고 변경하는 앱을 서로 분리할 수 있다.

단방향 데이터 흐름을 사용하는 앱의 UI 업데이트 루프는 다음과 같다.

Compose를 사용할때 위 패턴을 쓰면 이점이 있다.