안드로이드 앱에서 상태는 사용자 이벤트에 대한 응답으로 업데이트가 이루어진다.

.gif)
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 이라고 함