728x90
단방향 Data Flow란
안드로이드 앱에서 상태는 사용자 이벤트에 대한 응답으로 업데이트가 이루어진다.
- Event : 사용자 또는 프로그램의 다른 부분에 의해 생성됨
- Update State : 이벤트 핸들러가 UI 에서 사용하는 상태를 변경
- Display State : 새로운 상태를 표시하도록 UI가 업데이트 됨
기존의 구조화 되지 않은 상태
class HelloActivity : AppCompatActivity() {
private lateinit var binding: ActivityHelloBinding
var name = ""
override fun onCreate(savedInstanceState: Bundle?) {
binding.textInput.doAfterTextChanged {text ->
name = text.toString()
updateHello()
}
}
private fun updateHello() { binding.helloText.text = "Hello, $name" }
}
→ 이와 같은 코드는 UI가 늘어나면서 관리하기 어려워짐
- View와 얽혀 코드 테스트가 어려움
- 각 상태가 변경되고 수동으로 업데이트 되기 때문에 관리가 힘듬
- 코드가 복잡성이 올라감
ViewModel를 사용한 단방향 Data Flow 의 상태
class HelloViewModel: ViewModel() {
private val _name = MutableLiveData("")
val name: LiveData<String> = _name
fun onNameChanged(newName: String) { _name.value = newName }
}
class HelloActivityWithViewModel : AppCompatActivity() {
private val helloViewModel by viewModels<HelloViewModel>()
override fun onCreate(savedInstanceState: Bundle?) {
binding.textInput.doAfterTextChanged {
helloViewModel.onNameChanged(it.toString())
}
helloViewModel.name.observe(this) { name ->
binding.helloText.text = "Hello, $name"
}
}
}
- 상태를 Acticitiy 에서 ViewModel 로 이동
- 상태는 LiveData로 표시된다 (Observerable State Holder)
- LiveData, StateFlow, Flow, Observable
이러한 패턴을 Unidirectional data flow 이라고 함
- 테스트 가능성이 좋아짐
- 상태 캡슐화으로 버그 가능성이 작음
- UI 일괄성 : 모든 상태 업데이트가 즉시 UI에 반영
참고
https://www.notion.so/uzun/Unidirectional-Data-Flow-305e5021b597477099acd07f43fb653f#b47e3b47afb84a5da5ebb77bab402467
https://www.notion.so/uzun/Unidirectional-Data-Flow-305e5021b597477099acd07f43fb653f#8c113ffabb9c4eafac134619fea0157b
728x90
'Android > Study' 카테고리의 다른 글
💡 안드로이드에서 MVVM 패턴이란? (0) | 2022.08.20 |
---|---|
🏛 클린 아키텍처 in 안드로이드 (Clean Architecture) (0) | 2022.08.20 |
💉 Dependency Injection 의존성 주입이란? (0) | 2022.08.20 |
💡 Kotlin 코틀린 : DataClass 란? (0) | 2022.08.20 |
💡 Kotlin 코틀린 : SealedClass 란? (0) | 2022.08.20 |