본문 바로가기
Android

View Model을 왜 쓸까?

by 안솝우화 2021. 3. 25.
반응형

이유도 모르고 사용하는 것보다는 알고 사용하는게 더 좋다고 생각해 글을 작성하게 되었습니다.

우리는 왜 View Model을 사용할까요?

간단한 예시 하나를 들어보겠습니다

우선 이 코드를 실행 시켜봅시다

 



activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

        <TextView
            android:id="@+id/count_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="10dp"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="245dp"
            android:text="TextView"
            app:layout_constraintStart_toStartOf="@+id/button"
            app:layout_constraintTop_toTopOf="parent" />

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="288dp"
            android:text="Button"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>


MainActivity.kt

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import com.example.viewmodels.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    private lateinit var binding:ActivityMainBinding
    private var count = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
        binding.countText.text = count.toString()
        binding.button.setOnClickListener {
            count++
            binding.countText.text = count.toString()

        }
    }
}

위의 코드는 버튼을 누르면 count가 1씩 올라가고 텍스트뷰에 그 값이 보여지는 간단한 코드이다
이때 여기서 화면을 세로로 말고 가로로 돌려보자!
어찌 되었습니까? 정답은 바로 count값이 0으로 초기화 되었습니다
그 이유는 Android 앱을 사용할 때, 화면 회전과 같은 구성이 변경되면 앱은 새로운 구성으로 활동을 삭제하고 다시 생성합니다.
그래서 활동 실행 기간 동안 생성된 값도 삭제됩니다

또 다른 예를 들어보겠습니다
원격 rest api에서 2000개의 제품에 대한 데이터를 얻어야 한다면 구성이 변경될 때마다 앱은 온라인 REST API로 call해 데이터를 계속 다운로드해야 합니다
이렇게 되면 많은 데이터 및 시스템 리소스가 낭비되기 때문에 비효율 적 입니다
그리고 사용자가 다운로드가 완료될 때까지 계속 기다려야 하기 때문에, 이것은 사용자에게 굉장히 좋지않은 환경을 제공하는 일입니다
View Model 아키텍처 구성 요소는 이러한 문제에 대한 좋은 해결책입니다

다음은 View Model의 라이프사이클 입니다

출처 : developer.android.com/topic/libraries/archi..
이미지에서 볼수 있듯이 ViewModel 인스턴스는 메모리 보유 활동 데이터에 저장됩니다
이렇게 왜 ViewModel을 써야하는지에 대해 알아봤습니다
감사합니다

반응형

'Android' 카테고리의 다른 글

RecyclerView 란?  (0) 2021.04.03
Databinding과 Viewbinding의 차이점  (0) 2021.04.01
Firebase addValueEventListener() 사용후 문제점  (0) 2021.03.26
Main(UI) Thread 란?, Worker Thread 란?  (0) 2021.03.26
Data Binding 이란?  (0) 2021.03.25