- 디자인 패턴중 하나
- 디자인 패턴이란 개발 과정에서 공통으로 발생하는 문제를 해결하기 위해 사용되는 패턴
- 디자인 패턴을 사용해야 하는 이유
- 수정에 열려있는 구조로 유지보수에 들어가는 비용이 줄어듬
- 언어에 제약을 받지 않고 사용 가능
- MVVM 패턴은 마틴 파울러의 Presentation 모델 패턴에서 파생된 디자인 패턴
- 비즈니스 로직과 프레젠테이션 로직을 UI로부터 분리하는 것이 목적
- 테스트, 유지 보수, 재사용이 쉬워진다는 장점

- View는 ViewModel을 알지만, ViewModel은 View를 알지 못한다.
- ViewModel은 Model을 알지만, Model은 ViewModel을 알지 못한다.
- 이런 구조를 통해 ViewModel과 Model이 View로부터 독립적인 형태를 만들어 UI로부터 비즈니스 로직과 프레젠테이션 로직을 분리라는 목적이 실현 가능
- 구성 요소
- 모델 (Model)
- 앱에서 사용할 데이터와 관련된 행위와 데이터를 다룸
- Domain Layuer + Data Layer에 해당
- 뷰 (View)
- 사용자가 화면에서 보이는 것의 구조, 레이아웃 및 모양을 정의하는 역할을 한다.
- Presentation layer에서 UI부분에 해당
- 뷰 모델 (View Model)
- 뷰가 사용할 메소드와 필드를 구현하고 뷰에게 상태 변화를 알리는 역할
- 뷰와 모델의 상호 작용을 조정하는 역할을 해주고, 모델 클래스와는 1대N관계가 될 수 있다.

- 장점
- 뷰 모델이 모델과 뷰 사이의 어댑터로서 변경이 생겼을때 변경을 최소화
- 모델과 뷰 모델이 뷰로부터 독립적이라 독립적으로 개발 가능하고 테스트에 용이함
- 변경에 열려있는 패턴이라 변화 대응에 용이함
- 단점
- 소형 앱에서 사용시 오버헤드가 큼
- 앱이 커질경우 데이터 바인딩으로 인한 메모리 소모가 커진다.
- AAC ViewModel ≠ ViewModel
- AAC ViewModel은 ViewModel과 달리 UI 관련 데이터를 수명주기를 의식한 방식으로 저장하고 관리하도록 설계된 클래스 (화면 로테이션에 따른 데이터 유지등)
data class SampleData(val value: String)
class MainViewModel() {
val list = ObservableArrayList<SampleData>()
fun newUser(){
list.add(SampleData("value: " + random()))
}
private fun random(): Int {
return Random().nextInt(1000)
}
}
class MainActivity : AppCompatActivity(){
private lateinit var binding : ActivityMainBinding
private lateinit var vm : MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
vm = MainViewModel()
binding.vm = vm
}
}
● 참고
https://sungbin.land/mvvm-pattern-vs-aac-viewmodel-5e50b41a1fab
MVVM Pattern vs AAC ViewModel
View != Android View, ViewModel != ACC ViewModel, Model != data class, DataBinding != ACC DataBinding
sungbin.land
https://velog.io/@k7120792/Model-View-ViewModel-Pattern
MVVM 패턴
나의 첫 디자인 패턴 MVVM 패턴을 알아보자 🧐
velog.io
https://kaki104.tistory.com/531
MVVM Pattern을 사용하는 개발자를 위한 안내 (업데이트 : 2022/03/21)
2022.07.05 - [WPF .NET] - MVVM Pattern을 사용하는 개발자를 위한 안내 V1.0 part6 Command 2022.06.27 - [WPF .NET] - MVVM Pattern을 사용하는 개발자를 위한 안내 V1.0 part5 Converter 2022.06.15 - [WPF .N..
kaki104.tistory.com
https://github.com/KRMKGOLD/Android-MVVMSample
GitHub - KRMKGOLD/Android-MVVMSample: 아키텍쳐 패턴 중 MVVM 공부
아키텍쳐 패턴 중 MVVM 공부. Contribute to KRMKGOLD/Android-MVVMSample development by creating an account on GitHub.
github.com
https://leveloper.tistory.com/216
[Android] MVVM 패턴과 AAC에서의 ViewModel
안드로이드 오픈 톡방을 보다 보면 주기적으로 올라오는 질문이 몇 가지 있습니다. 그중 하나가 MVVM 패턴에서의 ViewModel과 AAC(Android Architecture Components)에서 제공하는 ViewModel이 다른 것인가에 대
leveloper.tistory.com
'Android 개인공부' 카테고리의 다른 글
Coroutine 1부 (0) | 2022.08.18 |
---|---|
Repository Pattern (0) | 2022.07.21 |
Android Custom Progress Dialog (0) | 2021.06.12 |
AAC LifeCycles (0) | 2020.12.16 |
Kotlin? (0) | 2020.11.26 |