앱 개발을 하다 보면, count 변수를 증가시키는 것과 같은 기능이 필요할 때가 있다.
그러나 화면을 회전시키면 수명 주기때문에 다시 데이터가 초기화된다.
이와 같이 화면 회전과 같이 구성을 변경할 때도 데이터를 유지하기 위해 쓰이는 개념이 ViewModel 클래스이다.
User interface (UI) controllers serve as a connection between your UI and any business logic in your application that controls, or is instructed by, that UI.
➡ UI와 비즈니스 로직 사이를 연결해주는 역할
class MainActivitylModel : ViewModel() {
var count = 0
fun updateCount() {
count++
}
}
class MainActivity : AppCompatActivity() {
var count = 0
private lateinit var viewModel: MainActivitylModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// this는 owner를 의미한다.
viewModel = ViewModelProvider(this).get(MainActivitylModel::class.java)
val textView = findViewById<TextView>(R.id.tvCount)
val button = findViewById<Button>(R.id.btnCount)
textView.text = viewModel.count.toString()
button.setOnClickListener {
viewModel.updateCount()
textView.text = viewModel.count.toString()
}
}
}
class MainActivitylModel : ViewModel() {
var count = MutableLiveData<Int>()
init {
count.value = 0
}
fun updateCount() {
// value로 접근해야 한다.
count.value = (count.value)?.plus(1)
}
}
class MainActivity : AppCompatActivity() {
var count = 0
private lateinit var viewModel: MainActivitylModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel = ViewModelProvider(this).get(MainActivitylModel::class.java)
val textView = findViewById<TextView>(R.id.tvCount)
val button = findViewById<Button>(R.id.btnCount)
// 값을 자동으로 업데이트 해준다.
viewModel.count.observe(this, Observer {
textView.text = it.toString()
})
button.setOnClickListener {
viewModel.updateCount()
}
}
}
[공식 문서 참고]
1. ViewModel 개요
2. ViewModel
3. LiveData 개요
[유투브 강의 참고]