반응형
MVVM in WPF (MVVM의 역사)
- MVVM은 WPF (Windows Presentation Foundation) 및 Silverlight의 기능을 활용하여 이벤트 중심 프로그래밍을 간소화하기 위해 Microsoft 아키텍처 Ken Cooper 및 Ted Peters가 개발했다.
- XAML (Extensible Application Markup Language)
- 디자이너를 위한 UI 개발환경
- 프로그래밍이 필요한 요소를 줄임
- 선언적인 UI 작성가능
ViewModel in WPF
- UI에 표시할 상태와 로직을 작성
- UI에서 발생한 이벤트(버튼클릭등)를 위임받아 처리
- ViewModel에서 발생한 변경을 UI에 반영
- 전통적인 개발자보다 디자이너를 위한 UI 개발환경 제공
- 기존 XML, HTML 보다 쉬운 XAML이라는 마크업 언어 사용
- ViewModel
- 뷰에서 DataContext를 지정하면 데이터 바인딩 엔진이 XAML로 작성한 UI와 뷰모델을 연결시켜주기 때문에 뷰의 참조를 가질 이유가 없다.
iOS(UI Kit)에서의 MVVM
- UI개발과 비 UI 개발 환경을 분리시키고 병행개발을 쉽게하겠다는 목적이 있는가? -> X
- View와 ViewModel을 연결해주는 데이터 바인딩 엔진이 시스템에 있는가? -> X
본래의 MVVM과 iOS에서의 MVVM은 맥락이 다르다.
- 그렇다면 왜? MVP과 아닌 MVVM을 선택해야하는가? -> Reactive Programming
Reactive Programming 아니, 사실상 RxSwift
- RxSwift의 도입으로 데이터 바인딩을 대체
- RxCocoa, RxTest등 거의 모든 작업을 Reactive Programming으로 해결하기 위한 도구 제공
- Notification Center를 활용해서 수동 데이터 바인딩을 할 수 도 있지만, 대부분의 회사에서는 RxSwift를 사용해 MVVM을 구현
- UI Kit에서의 MVVM 패턴은 RxSwift에 대한 의존도가 상당히 높다.
- MVC 나 MVP에서도 RxSwift를 사용할 수 있다. iOS환경 (UI Kit)에서 MVVM은 논리적으로 설득력이 다소 떨어져 보인다.
그럼에도 불구하고 왜?
RxSwift를 MVVM에서 사용하는 이유
- MVP에 비해 가지는 장점이 있다.
- 프레젠터가 수동적으로 뷰를 갱신하는 작업을 없앨 수 있다.
- 테스트시 뷰모델이 뷰에 대한 참조를 갖고 있지 않기 때문에, 보다 수월하게 할 수 있다.
그렇다면? 단점은 없는가?
- 러닝커브가 있다. RxSwift뿐만아니라, 관련(RxCocoa등) 라이브러리에 대해서도 알아야한다.
- 단순히 뷰모델과 뷰를 바인딩 하기위한 용도 뿐만 아니라, 네트워크 통신, 비동기, 테스트코드등 프로젝트 전체를 재구성해야하는 경우가 많다.
데이터 바인딩
- RxSwift로 데이터 바인딩을 하려면, RxCocoa를 이용한 수동 바인딩 필요
Model
- 앱에서 사용되는 데이터 담당
- 단순 데이터 뿐아니라, dao 와 데이터 유효성 검사
View
- 앱에서 보여지는 UI 컴포넌트 및 레이아웃
- ViewModel의 상태 변화에 대한 UI render
- ViewLifeCycle 관리
ViewModel
- model에게 data 업데이트 요청
- 데이터 가공 및 변환
- 비지니스 로직 처리
- model로 부터 data 가져오기
반응형
'Architecture' 카테고리의 다른 글
iOS(UIKit)에서의 Coordinator Pattern (0) | 2023.09.18 |
---|---|
iOS(UIKit)에서의 CleanArchitecture+MVVM 예시 뜯어보기 (0) | 2023.09.15 |
MVP (Model - View - Present) (0) | 2023.08.28 |
MVC(Model - View - Controller) (0) | 2023.08.16 |
아키텍처(Architecture) (0) | 2023.08.13 |