이번 챕터에서는 흔히들 MVVM에서 ViewModel을 AAC(Android Architecture Component)의 ViewModel로 생각하시고 사용하시는 분들이 있어서 정리해보았습니다.
1. MVVM에서의 ViewModel
우리가 아는 MVVM디자인 패턴의 ViewModel은 View와 Model의 의존성을 낮추고 그 사이에서 데이터를 바인딩 해주기 위한 역할이었습니다. 하지만 구글에서 똑같은 이름의 ViewModel을 내놓으면서 혼란스러워지기 시작합니다.
2. AAC ViewModel
저도 처음에 ViewModel을 검색했을때 가장 먼저 본 이미지입니다.
필자도 처음 이미지를 보고 MVVM에서 정의하는 ViewModel이라고 생각했었습니다.
하지만 해당 이미지는 AAC ViewModel에 대한 설명을 하는 이미지입니다.
AAC ViewModel은 우리가 시스템에서 UI컨트롤러를 제거하거나 다시 만드는 경우 일시적으로 UI관련 데이터가 삭제됩니다. 예를들어서 화면을 회전하는 경우가 그렇습니다. 그럴 때 UI관련 데이터를 저장하고 관리할 수 있게끔 설계된 클래스입니다.
위의 이미지는 AAC ViewModel의 Lifecycle에 대한 이미지입니다. Activity가 다시 onCreate가되도 ViewModel Scope는 없어지지 않고 남아있습니다.
3. 결론
하지만 결론적으로 AAC ViewModel을 MVVM 패턴의 ViewModel로 사용할 수 없는건 아닙니다. 사용할 수 있습니다.
하지만 AAC ViewModel은 Activity내에서 Singleton으로 생성됩니다. MVVM패턴에서 View : ViewModel = N : 1의 개념이 성립하는데 예를들어 Activity내에 여러 Fragment에서 각각의 ViewModel을 사용하긴 어려울 것입니다.
'안드로이드' 카테고리의 다른 글
[android/hilt] @Binds vs @Provides (0) | 2024.03.18 |
---|---|
[android/안드로이드] Cold Stream , Hot Stream 차이점 (0) | 2022.06.08 |
[android/안드로이드] MVVM이란? (0) | 2022.04.29 |
[android/안드로이드] jetPack Navigation Fragment 재생성 이슈 해결 (0) | 2022.04.26 |
[android/안드로이드] JetPack Navigation을 이용한 BottomNavigationView 생성 (0) | 2022.04.26 |