본문 바로가기

Android 개인공부

MVVM

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

  • View는 ViewModel을 알지만, ViewModel은 View를 알지 못한다.
  • ViewModel은 Model을 알지만, Model은 ViewModel을 알지 못한다.
  • 이런 구조를 통해 ViewModel과 Model이 View로부터 독립적인 형태를 만들어 UI로부터 비즈니스 로직과 프레젠테이션 로직을 분리라는 목적이 실현 가능
  • 구성 요소
  1. 모델 (Model)
    • 앱에서 사용할 데이터와 관련된 행위와 데이터를 다룸
    • Domain Layuer + Data Layer에 해당
  2. 뷰 (View)
    • 사용자가 화면에서 보이는 것의 구조, 레이아웃 및 모양을 정의하는 역할을 한다.
    • Presentation layer에서 UI부분에 해당
  3. 뷰 모델 (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