일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Kotlin
- ㅋㅁ
- Design Pattern
- 옵저버 패턴
- 추상팩토리패턴
- 빌터패턴
- designPattern
- a
- F
- 추상 팩토리
- ㅓ
- Functional Programming
- Observer Pattern
- factory method
- 싱글톤
- PrototypePattern
- r
- 함수형프로그래밍
- Singleton
- builderPattern
- 디자인패턴
- Abstract Factory
- 팩토리 메소드
- El
- 프로토타입 패턴
- 디자인패턴 #
- 코틀린
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
Event에 따른 UI State 처리방법 본문
UI State의 생성 및 변화
- 사용자 Event에 의한 상태변화
- Local Source에 의한 상태변화
- External Source에 의한 상태변화
Local Source에 의한 상태 생성 및 변화
주사위 두 개를 굴릴 수 있는 화면에 있다고 가정하다.
주사위 값을 표시하는 것 외에도 사용자가 주사위를 굴리는 횟수를 추적하고 싶습니다. UI 상태는 다음과 같습니다.
주사위를 굴리는 비즈니스 로직은 Random API에 대한 One-shot API을 통해 구현됩니다.
그렇다면 이 UI 상태를 상태 홀더에 어떻게 보관할까요? 관찰 가능한 데이터 홀더 클래스를 만드는 것입니다!
MutableStateFlow API를 사용하여 이를 달성합니다. 재사용성과 테스트 가능성에 영향을 미칠 수 있는 Random API에 대한 직접적인 종속성을 피하기 위해 Random API를 구현하는 보다 일반적인 RandomProvider 인터페이스를 도입합니다.
UI 상태를 생성하는 비즈니스 로직은 상태 홀더에 Local합니다. UI 상태를 직접 수정하고 단일 진실 소스 원칙을 위반하는 관찰 가능한 상태 홀더의 변경 가능한 버전을 노출하는 것을 방지하기 위해 UI 상태를 StateFlow로 노출합니다.
External Source에 의한 상태 생성 및 변화
주사위를 던지는 사람의 이름이 필요하다가 가정해보자!
데이터는 데이터 스트림 형태로 다른 계층(Domain/Data)에서 제공됩니다. 이 데이터를 UI 상태에 맞게 조정하려면 관찰 가능한 데이터 홀더 유형으로 변환해야 합니다.
Local Source 와 External Source에 의한 변화
만약에 사용자가 로그인을한 상태에서만, 주사위를 던질수있다고 생각해보자
주사위를 굴리는 상태(rollState) 로그인한 상태(user name) 2개의 Stream을 1개로 합쳐서
DiceRollUiState를 생성한다.
StateLess 한 Composable 함수를 내부적으로 사용하는 패턴을 이용한다.
'Compose' 카테고리의 다른 글
안드로이드 컴포즈 네비게이션1 기초 Compose navigation Basic1 (1) | 2024.12.01 |
---|---|
Compose UI Event 다루기 (0) | 2024.11.18 |
Compose 상태와 상태홀더 다루기 State & StateHolder (0) | 2024.11.17 |
재사용 가능한 Composable 함수 만들기. (0) | 2024.11.05 |
Compose UI(Composable) 생명주기 (3) | 2024.09.26 |