티스토리 뷰
MVVM : Model, View, ViewModel 각각의 기능에 따라 분리 하여 코드를 작성하는 것을 MVVM 패턴
MVVM 패턴의 목표는 비즈니스 로직과 프레젠테이션 로직을 UI로부터 분리하는 것
분리하게 되면 테스트, 유지 보수, 재사용이 용이
비지니스 로직 : 데이터를 가공 및 수정 . 처리
프리젠테이션 로직 : 디자인 구성을 위한 로직
- 모델 (Model)
- 뷰 (View)
- 뷰 모델 (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
https://github.com/crazzero/TutorialApp
https://blog.crazzero.com/m/152
- Total
- Today
- Yesterday
- 애디티브
- 언리얼엔진
- rootmotion
- Inverse Kinematics
- 초조한유녕
- 캔버스
- 언리얼엔진Locomotion
- 언리얼IK
- 세션
- 쿠키
- additive
- 언리얼루트모션활성화
- #ui canvas
- #unity
- 언리얼엔진루트모션
- 보행이동기반블렌딩
- 유니티 캔바스
- 캔바스
- ui
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |