티스토리 뷰

카테고리 없음

MVC, MVP, MVVM 패턴

유녕2 2022. 4. 19. 09:49

 

 

MVVM : Model, View, ViewModel 각각의 기능에 따라 분리 하여 코드를 작성하는 것을 MVVM 패턴

MVVM 패턴의 목표는 비즈니스 로직과 프레젠테이션 로직을 UI로부터 분리하는 것

분리하게 되면 테스트, 유지 보수, 재사용이 용이

 

 

비지니스 로직 : 데이터를 가공 및 수정 . 처리

프리젠테이션 로직 : 디자인 구성을 위한 로직

 

 

  1. 모델 (Model)
  2. 뷰 (View)
  3. 뷰 모델 (View Model)

뷰는 뷰 모델을 알지만, 뷰 모델은 뷰를 알지 못합니다. 뷰 모델은 모델을 알지만, 모델은 뷰모델을 알지 못합니다. 이런 구조를 통해서 뷰 모델과 모델이 뷰로부터 독립적인 형태를 만들어서 위에서 말한 UI로부터 비즈니스 로직과 프레젠테이션 로직을 분리라는 목적을 이룰 수 있게 된 것입니다.

 

 

<MVVM 의 Components>

  • Model : 디자인 패턴에서는 데이터와 데이터에 관련된 행위를 모두 합쳐 Model 이라 부른다. 즉, 데이터와 데이터를 가져오는 로직자체를 Model 이라고 생각할 수 있겠다. 특히, MVVM 패턴에서의 Model 은 domain 모델을 나타낸다. domain 모델이란, 소프트웨어로 해결하고자 하는 문제 영역을 개념적으로 표현한 것이다.
  • View : 사용자에게 화면으로 보여지는 모든 구조, 레이아웃을 View 라 부른다. View 는 model 을 시각적으로 표현하고, 사용자의 상호작용을 받는다. View 는 data binding 을 통해 이러한 입력을 View Model 에게 전달한다.
  • ViewModel : ViewModel 은 View 의 추상화된 형태이다. View 에 보여져야하는 데이터와 명령들을 가지고 있다. ViewModel 이 MVC 패턴의 Controller 나 MVP 패턴의 Presenter 와 다른 점은, View 가 ViewModle 을 observe(관찰) 하는 형태로 binding 되어 있기 때문에, data 의 갱신을 View 가 자동으로 받을 수 있게 되어있다는 것이다. 

<MVVM 의 구조>

각각의 컴포넌트는 서로 reference를 갖지 않고, (View->ViewModel->Model) 형태의 단방향 depedency 를 갖는다.

 

 

2. 안드로이드에서의 MVVM 패턴

  • ViewModel

- View 와 Model 사이의 매개체 역할을 한다.
(1) Model 에서 가져온 데이터를 UI 에 필요한 정보로 가공
(2) View 가 가져갈 수 있도록 해당 데이터 변경에 대한 "notify" 를 보냄

- ViewModel 과 View 는 MVP 패턴과 다르게 Many to One 관계를 가질 수 있다.
즉, 여러개의 Fragment 가 하나의 ViewModel 을 가질 수 있다.

- ViewModel 은 View 에 영햘을 끼칠 수 있는 Model 의 상태관리도 담당한다.
(로딩중, 네트워크 에러, 오프라인 visibility 등...)

- View 의 Context 에 대한 레퍼런스를 가지면 안된다.
View 는 ViewModel 의 레퍼런스를 가지지만, ViewModel 은 View 에 대한 정보가 전혀 없어야 한다.
만약 ViewModel 이 View 의 레퍼런스를 가진다면, lifecycle 에 메모리 누수가 발생할 수 있다.
ViewModel 이 destroy() 이외의 라이프사이클에서는 메모리에서 해제되지 않기 때문이다.

 

 

  • View

- Activity, Fragment, CustomView, Dialog, Toast, Snackbar, Menu 등의 UI 컴포넌트

- View는 UI 업데이트를 위해 ViewModel과 바인딩하게 된다. 다른 표현으로는 View가 ViewModel에 구독을 하게되고, ViewModel의 상태가 변경되면 그 이벤트를 받아 UI를 갱신한다.

- permissiont 이나, startActivity 등의 네비게이션 역할도 한다.

 

 

  • Model

- Network, DB, SharedPreferences 등 다양한 Data Source 로부터 필요한 데이터를 준비한다.

- ViewModel  에서 데이터를 가져갈 수 있게 데이터를 준비하고, 그에 대한 이벤트를 보낸다.

 

 

 

 

 

https://velog.io/@eoqkrskfk94/MVVM-Architecture

 

MVVM Architecture

MVVM 패턴의 목표는 비즈니스 로직과 프레젠테이션 로직을 UI로부터 분리하는 것입니다.

velog.io

https://github.com/crazzero/TutorialApp

 

GitHub - crazzero/TutorialApp: android tutorial app

android tutorial app. Contribute to crazzero/TutorialApp development by creating an account on GitHub.

github.com

https://blog.crazzero.com/m/152

 

그래서 MVC, MVP, MVVM 디자인패턴 이 뭔데? - 안드로이드 /뿌시레기/

tl;dr MVC (Model - View - Controller) Model 은 데이터, View 는 XML 파일, Controller 는 Activity MVP (Model - View - Presenter) Model 은 데이터, View 는 Activity, Presenter 는 Model 과 View 를 연결..

blog.crazzero.com

 

 

https://velog.io/@dongwan999/8.-%EA%B6%81%EA%B8%88%ED%96%88%EB%8D%98-%EA%B2%83%EB%93%A4-3%ED%8E%B8-ViewModel-LifeCycle

 

8. 궁금했던 것들 3편 - ViewModel LifeCycle

이번엔 MVVM의 ViewModel에 관한 궁금증을 해결해 볼 예정이다. MVVM에 관한 사항은 해당 글에서 설명한 바가 있다. 잘 모른다면 한 번 읽어보는 것도 좋겠다. MVVM을 안드로이드 문서에서는 Clean Architec

velog.io

 

 

 

https://velog.io/@haero_kim/Android-깔쌈하게-MVVM-패턴과-AAC-알아보기

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함