ViewModel을 활용하여 데이터를 Flow나 LiveData로 보유하고 View에서 요청 시 또는 ViewModel 초기화 시 Model에서 데이터를 받아와 View가 이를 관찰하는 방식은 보통 MVVM 패턴에서 사용하는 방법입니다. 하지만 여기서 혼란이 생기기도 하는데, 이 ViewModel이 MVVM 패턴에서의 ViewModel인지, 아니면 AAC(Android Architecture Components)에서 제공하는 ViewModel인지 헷갈릴 수 있습니다. 두 클래스는 명확한 차이가 있으며, 이를 아는 것이 Android 앱 개발에 도움이 됩니다.
1. MVVM 패턴에서의 ViewModel
MVVM(Model-View-ViewModel)은 Microsoft에서 고안된 디자인 패턴입니다. 이 패턴의 목표는 비즈니스 로직과 UI 프레젠테이션 로직을 분리하여, View와 Model 간의 직접적인 상호작용을 피하는 것입니다. MVVM에서의 ViewModel은 View에 필요한 데이터를 준비하고 상태 변화를 관찰하여 View가 자동으로 업데이트되도록 합니다. 이로써 View와 Model 간에 데이터 관리를 담당하고 상태를 바인딩하는 역할을 합니다.
2. AAC의 ViewModel
AAC ViewModel은 구글이 Android 플랫폼을 위해 제공하는 컴포넌트로, MVVM을 포함한 여러 디자인 패턴에서 유용하게 활용됩니다. 특히, AAC ViewModel은 Android의 수명 주기를 고려하여 UI 데이터를 저장하고 관리하도록 설계되었습니다. 화면 회전 등의 구성 변경이 발생하더라도, AAC ViewModel은 데이터를 유지해 주어 이를 통해 MVVM을 구현할 수 있게 돕습니다.
혼란의 원인: 유연성의 차이
일부 블로그에서는 MVVM 구현에 데이터 바인딩이 필수적이며, ViewModel이 직접 XML에 바인딩되어야 한다고 주장합니다. 반면, ViewModel이 View와 Model 간의 중간 매개체 역할을 수행하며, 반드시 XML에서 데이터 바인딩을 사용하지 않아도 된다는 유연한 접근도 존재합니다. 이러한 관점 차이는 MVVM이 특정 플랫폼에 종속되지 않고 다양한 형태로 구현될 수 있기 때문입니다.
시점과 플랫폼에 따른 MVVM의 적용 차이
MVVM은 Android에만 국한된 패턴이 아니기 때문에, 각 플랫폼에 맞는 형태로 달라질 수 있습니다. Android는 Activity와 Fragment가 UI와 생명주기 관리를 동시에 담당하므로, 이를 'View'로 볼 것인지 아니면 ViewModel이 다뤄야 할 부분으로 볼 것인지 논의가 필요합니다. 따라서, 엄격한 규칙보다는 프로젝트의 특성에 맞는 형태로 MVVM을 적용하는 것이 실용적일 수 있습니다.
결과적으로, MVVM의 구현 방식은 상황과 필요에 따라 유연하게 선택될 수 있습니다. 단지 구조가 다르다고 MVVM이 아닌 것이 아니라, 핵심 목표인 관심사의 분리를 실현할 수 있는지 여부가 중요합니다.
참고
https://velog.io/@spdlqjfire/Android-AAC-ViewModel-vs.-MVVM-ViewModel
https://leveloper.tistory.com/216
'안드로이드 > 안드로이드' 카테고리의 다른 글
[Android/Kotlin] provides 메서드 (0) | 2024.11.14 |
---|---|
안드로이드에서 UI를 업데이트 하는 방법 (0) | 2024.11.07 |
안드로이드 MVVM 카카오 로그인 이슈 (0) | 2024.11.01 |
CNA(Chirag Note App) 프로젝트하면서 생긴 이슈 및 해결 ,기술 정리 (0) | 2024.10.02 |
CNA(Chirag Note App) 클론코딩 & 리펙토링 회고 (1) | 2024.10.01 |