안드로이드 앱에서 상태는 사용자 이벤트에 대한 응답으로 업데이트가 이루어진다.
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가 늘어나면서 관리하기 어려워짐
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"
}
}
}
LiveData
로 표시된다 (Observerable State Holder)LiveData
, StateFlow
, Flow
, Observable
이러한 패턴을 Unidirectional data flow 이라고 함