프로젝트/Android

View Model 기초

Wonjun Sung 2021. 3. 6. 19:46
  •  안드로이드에서 MainActivity나 Fragment에는 View 이외의 것들은 포함시키지 않는 것이 좋습니다.

작고 경량의 앱이면 괜찮을 지 몰라도 어느 정도의 규모가 있는 앱이라면 백엔드나 웹에서 매번 API를 호출한다면 그 비용은 만만치 않을 것 입니다. 

그래서 Google에서도 권장하고 있으며 실질적으로 매우 유용한 View Model 클래스를 사용하여 로직을 분리시켜줍니다.

출처:Android Developer - ViewModel Lifecycle

왼쪽의 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