Unidirectional Data Flow (단방향 데이터 흐름)
- Compose의 UI는 수정될 수 없음.
- UI 상태가 변경될 때만 변경된 UI 트리를 다시 만듬.
- ex) TextFiled는 값을 받고 onValueChange를 반환함. TextFiled가 상태를 같는게 아닌 다른 만들어놓은 값이 가짐
- 상태 반환 -> 이벤트 반환. ** 단방향 데이터 흐름이 적합
이벤트, 상태
이벤트
- UI의 일부에서 이벤트를 발행해 위로 전달
- 뷰 모델에서 처리하는 버튼 클릭, 사용자 세션의 만료를 표현하는 앱의 다른 레이어에서 전달되는 이벤트
상태 갱신
상태 표시
- 스테이트 홀더가 아래로 전달한 상태를 UI가 표시함
단방향 데이터 흐름의 장점
- 테스트 가능성: 상태를 표시하는 UI와 상태를 분리하면, 둘을 분리해 쉽게 테스트할 수 있음
- 상태 캡슐화: 상태가 한곳에서만 갱신될 수 있으면, 일관되지 않는 상태 때문에 발생하는 버그를 줄일 수 있음(SSOT)
- UI 일관성: StateFlow와 LiveData와 같은 관측가능한 상태 홀더를 사용해 UI에 상태 갱신을 즉각 반영할 수 있다.
Compose의 단방향 데이터 흐름
- 컴포저블은 상태와 이벤트에 따라 동작
- 컴포즈는 값 홀더로 State 객체를 정의, 상태 값의 변경을 리컴포지션을 유발함
- remember, rememberSaveable로 상태를 저장한다
- mutableStateOf는 Compose가 관측할 수 있는 타입은 MutableState를 만듬 -> 값이 변경되면 값을 읽는 모든 컴포지션 함수의 리컴포지션을 준비함
- remember는 객체를 컴포지션에 저장하고, remember를 호출한 컴포저블이 컴포지션에서 제거될 떄 객체를 잊어버림
- rememberSavable은 객체를 Bundle에 저장해 configuration이 변경되어도 유지함