Beeeam

MVVM ViewModel vs AAC ViewModel 본문

Android

MVVM ViewModel vs AAC ViewModel

Beamjun 2024. 2. 15. 18:49

MVVM 패턴은 MVP 패턴에서의 Presenter 대신에 ViewModel을 사용하는 차이를 가집니다. 근데 안드로이드 권장 아키텍처에도 ViewModel이 존재합니다. 그래서 이 둘이 같은 개념인지에 대해서 공부하고 정리하고자 합니다.

MVVM ViewModel

MVVM 패턴은 비즈니스 로직과 프리젠테이션 로직을 UI에서 완전히 구분하는 것을 목표로 하는 디자인 패턴입니다. Model, View, ViewModel로 구성되며 ViewModel은 Model과 View의 연결 다리가 되어 비즈니스 로직과 프리젠테이션 로직을 분리하도록 합니다.

View는 ViewModel을 알지만 ViewModel은 View를 모르고, ViewModel은 Model을 알지만 Model은 ViewModel을 모릅니다. 그래서 단방향으로 흐름이 진행됩니다.

View는 ViewModel을 옵저빙 패턴으로 관찰하다가 변화가 감지가 되면 이에 대응하여 UI를 업데이트 하게 됩니다.

그래서 MVVM의 ViewModel은 View와 Model의 연결 다리 역할을 하고 데이터를 관리하는 역할을 의미합니다.

AAC ViewModel

AAC ViewModel Life Cycle

 

AAC(Android Architecture Components)에서 ViewModel은 컴포넌트로 Android의 생명주기에 맞게 UI 관련 데이터를 저장하고 관리합니다. 만약 AAC ViewModel을 사용하지 않는 경우 화면이 회전 되는 등 화면이 파괴되면 데이터가 초기화 되는 문제가 있습니다. 이런 경우 onSaveInstanceState 또는 onRestoreInstanceState를 사용하여 데이터를 저장했다가 복원하는 과정을 거쳐야 데이터를 유지할 수 있지만 AAC ViewModel을 사용하면 데이터를 간단하게 유지할 수 있습니다.

차이점

MVVM ViewModel은 디자인 패턴의 일부로 View와 Model 사이를 연결하는 역할에 초점이 있다면 AAC ViewModel은 View의 생명주기에 맞춰서 UI 관련 데이터를 관리하는 역할에 초점이 맞춰져 있습니다.

결론

AAC ViewModel을 사용하지 않아도 MVVM 패턴을 구현할 수 있습니다. 반대로 AAC ViewModel을 사용한다고해서 MVVM 패턴을 구현했다고 할 수 없습니다. AAC ViewModel은 MVVM ViewModel을 더 쉽게 구현할 수 있는 컴포넌트로 이해하면 될 거 같습니다.

'Android' 카테고리의 다른 글

Sticky Header RecyclerView  (0) 2024.04.22
Bottom Navigation in Multi Module with deeplink  (0) 2024.03.26
명령형 vs 선언형, Jetpack Compose  (0) 2024.02.04
MVI  (0) 2024.01.24
LazyColumn  (1) 2024.01.23