- 안드로이드에서 MainActivity나 Fragment에는 View 이외의 것들은 포함시키지 않는 것이 좋습니다.
작고 경량의 앱이면 괜찮을 지 몰라도 어느 정도의 규모가 있는 앱이라면 백엔드나 웹에서 매번 API를 호출한다면 그 비용은 만만치 않을 것 입니다.
그래서 Google에서도 권장하고 있으며 실질적으로 매우 유용한 View Model 클래스를 사용하여 로직을 분리시켜줍니다.
왼쪽의 Activity lifecycle 과 우측의 Viewmodel lifecycle을 비교해보면 onCreate()되는 시점부터 onDestroy(), 파괴되는 시점까지 Viewmodel 은 데이터를 보존합니다.
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var viewModel : MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
binding.countText.text = viewModel.currentCounter()
binding.button.setOnClickListener {
binding.countText.text = viewModel.updatedCounter().toString()
}
}
}
MainActivity.kt
class MainViewModel : ViewModel(){
private var count = 0
fun currentCounter(): String {
return count.toString()
}
fun updatedCounter(): Int {
return ++count
}
}
MainViewModel.kt
def lifecycle_version = "2.3.0"
def arch_version = "2.1.0"
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
build.gradle
수명 주기 | Android 개발자 | Android Developers
Lifecycle 수명 주기 인식 구성요소는 활동 및 프래그먼트와 같은 다른 구성요소의 수명 주기 상태 변경에 따라 작업을 실행합니다. 이러한 구성요소를 사용하면 잘 구성된 경량의 코드를 만들어
developer.android.com
'프로젝트 > Android' 카테고리의 다른 글
ViewModelScope (0) | 2021.03.13 |
---|---|
Android Kotlin - Navigation Fragment (0) | 2021.03.11 |