[Android 개념] MVVM ViewModel, AAC ViewModel

이창민·2022년 8월 10일
0

Android 개념

목록 보기
7/9

사람들이 AAC ViewModel과 MVVM의 ViewModel은 다른 것이라고 얘기한다..

무슨 소릴까? 알아보자..

MVVM ViewModel

뷰와 뷰모델의 연결을 최소화하는 목적을 가진다.

기존의 MVC 패턴을 사용해 어플리케이션을 구현하고 있다고 생각해보자.

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

    <data>

        <variable
            name="sound"
            type="com.study.beatbox.Sound" />
    </data>

    ...

</layout>

위 와 같은 xml 파일이 있고 이름은 list_item_sound.xml이라고 생각해보자.
xml에 Sound 객체를 직접 바인딩하는 것을 확인할 수 있다.

이런 상황은 아키텍처 관점에서 문제가 생깁니다.

뷰(xml) -> 모델(Sound)
??? 컨트롤러(Activity) ???

대부분의 아키텍청에서 하나의 클래스는 한 가지 책임을 갖는 것이 기본 원칙입니다.
MVC 또한, 모델은 앱이 작동하는 방법을 나타내고, 컨트롤러는 모델과 뷰를 중재해 앱의 데이터를 보여주는 방법을 결정하고, 뷰는 화면에 데이터를 보여줍니다.

하지만 위 경우 역할 분담이 분명하게 이뤄지지 않습니다.

Sound 모델 객체 자체가 컨트롤러 역할을 하기 때문입니다.

이런 이유로 데이터 바인딩을 제대로 사용하기 위해 뷰모델이라는 객체가 필요합니다.

뷰모델은 뷰의 데이터를 준비하는 방법을 결정하는 책임을 갖습니다.

이런 아키텍처를 MVVM이라고 하고, MVC에서 컨트롤러가 런타임시 담당한 대부분의 일을 ViewModel이 담당합니다. 즉.. 레이아웃에서 위젯들을 데이터와 바인딩하던 일을 뷰모델이 하게 됩니다. 컨트롤러(Activity/Fragment)는 데이터 바인딩과 뷰모델을 초기화하고 연결하는 일을 하게 됩니다.

AAC ViewModel

위의 MVVM ViewModel을 사용하고 장치 회전이 발생하는 경우를 생각해보자.
그런 경우.. 정보의 보존이 이뤄지지 않을 것이다..
이 포스팅 전에 ViewModel을 사용하면 이런 경우에도 정보의 보존이 이뤄진다고 서술했다.
그러면 이전에 설명한 ViewModel이 AAC ViewModel인 것을 알 수 있다..

AAC ViewModel을 사용해 UI 관련 데이터를 저장하고 관리하면 데이터의 유지가 이뤄진다.

lifecycle

ViewModel 의 생명주기는 아래 그림과 같습니다.

처음 activity가 onCreate를 호출할 때 ViewModel이 생성되고
시스템은 기기가 회전되든.. 무슨 일이 있든... 즉, activity의 onCreate가 여러번 호출되어도 ViewModel은 그대로 존재합니다. ViewModel은 activity가 끝나고 폐기될 때까지 존재합니다.

참고자료

https://tv.naver.com/v/4637223/list/272653
https://developer.android.com/topic/libraries/architecture/viewmodel?gclid=Cj0KCQjwrs2XBhDjARIsAHVymmTTWCz-17rEVmfGFMWckhPgXXLix1hcyQr3p8KrZJaQlxfBGjFi7T4aAtF0EALw_wcB&gclsrc=aw.ds

profile
android 를 공부해보아요

0개의 댓글