안드로이드/코틀린

[Android Studio]MVVM ViewModel 간단히 사용하기

eqrw105 2021. 11. 7. 13:00

[Android Studio]MVVM ViewModel 간단히 사용하기

 

해당 포스팅은 MVVM에 대한 이론을 알고 있다는 가정하에 작성된 포스팅입니다.

 

종속 선언 참고

https://developer.android.com/topic/libraries/architecture/adding-components?hl=ko#lifecycle 

https://developer.android.com/jetpack/androidx/releases/lifecycle?hl=ko#declaring_dependencies 

 

Lifecycle  |  Android 개발자  |  Android Developers

Lifecycle 수명 주기 인식 구성요소는 활동 및 프래그먼트와 같은 다른 구성요소의 수명 주기 상태 변경에 따라 작업을 실행합니다. 이러한 구성요소를 사용하면 잘 구성된 경량의 코드를 만들어

developer.android.com

 

프로젝트에 구성요소 추가  |  Android 개발자  |  Android Developers

프로젝트에 구성요소 추가 Issue Tracker버그를 수정할 수 있도록 문제를 신고해 주세요. 시작하기 전에 아키텍처 구성요소 앱 아키텍처 가이드를 읽어보는 것이 좋습니다. 가이드에는 모든 Android

developer.android.com

 

1. ViewModel Class 생성

class MainActivityViewModel: ViewModel() {

    private val _text: MutableLiveData<String> = MutableLiveData()
    val text: LiveData<String> get() = _text

    fun updateText(t: String) {
        _text.postValue(t)
    }
}

MutableLiveData는 수정 가능한 변수, LiveData는 수정 불가한 변수라고 생각하면 간단하다.

 

 

2. ViewModel 초기화 및 옵저빙

class MainActivity : ComponentActivity() {
    private lateinit var viewModel: MainActivityViewModel
    
     override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //viewModel 초기화
        viewModel = ViewModelProvider(this).get(MainActivityViewModel::class.java)
        //observer
        viewModel.text.observe(this) { string ->
        	Log.d("mainActivity", string)
        }
        //데이터 업데이트
        viewModel.updateText(UUID.randomUUID().toString())
        viewModel.updateText(UUID.randomUUID().toString())
        viewModel.updateText(UUID.randomUUID().toString())
    }
}

위 코드에서 viewModel.text.observe ~ 코드는 1번에서 만들었던 ViewModel의 text 변수의 값이 변경될 때마다 실행된다.

viewModel.updateText 함수를 통해 text 변수의 값이 3번 변경되므로 Log가 3번 찍히게 되는 것이다.

예제에서는 Log를 확인했지만 view의 text를 변경시키거나 여러 방향으로 응용이 가능하다.

MVVM의 observe기능을 잘 이용하면 데이터가 변할 때마다 TextView의 값을 수정하는 코드를 작성하지 않아도 되며, 생명주기를 편하게 관리할 수 있다.