MVVM Architecture
MVVM 의 핵심은 View (user-interface code) 와 Model (backend or logic) 의 분리이다. 이를 위해 Model 의 모든 변화를 View 가 파악하고 UI 를 Rebuild 할 수 있어야 한다.
Model
Model 은 UI 와 독립적이다. (Model 파일에는 "import SwiftUI" 구문이 없다.)
Model 은 앱이 '무엇인지, 무엇을 할지' 설명하는 모든 Data & Logic 을 담고 있다.
Model 은 앱의 Source of truth 로서 Model 의 데이터 혹은 정보를 UI 코드에 저장하거나 하는 일은 없다.
View
View 는 앱을 사용자에게 '어떻게 보여 줄지' 에 대한 것이다. View 는 Model 로부터 정보를 받고 이를 표현한다. 즉, View 는 항상 Model 의 현재 상태를 반영한 것 이다. 따라서, 대부분의 경우 View 는 상태(State) 라는 것이 없고, Model 의 현재 상태를 표현할 뿐이다.
View 는 immutable 하기 때문에 전체 body 를 rebuild 하는 것 외엔 View 를 수정하기 힘들다. 따라서, View 의 생김새는 전적으로
body 에 의해 결정(Declarative)된다. 그러므로 View 는 Model 의 변화에 대해 항상 효율적으로 반응(Reactive)한다.
ViewModel
View 를 Model 에 Bind 하여 Model 의 상태 변화에 대해서 반응하고 Rebuild 할 수 있도록 한다. Model 의 다양한 데이터 표현 방식을 View 에서 단순히 표현할 수 있도록 하는 Interpreter 역할이라 할 수 있다. (e.g. SQL Data Model 을 View 에서 배열로 표현.) 반대로 View 에서 파악한 사용자의 의도를 처리하기도 한다.
예를 들어, 항공 예약 사이트에서 표를 예매하는 과정을 View 에서 받으면 그 과정을 처리하고 Model 의 정보를 수정한다. Model 에 변화가 생겼으므로 다시 ViewModel 에게 변화가 알려지고 ViewModel 이 해당 변화를 Publish 하면 Subscribe 하는 View 들이 Rebuild
된다.
MVVM 의 특성
MVVM 모델에서 View 는 항상 ViewModel 을 통해서만 Model 의 Data 를 얻어 올 수 있다. ViewModel 은 항상 Model 의 모든 변화를 주시하고 변화가 생기면 즉시 전체 시스템에 Publish. 이를 Subscribe 하는 View 들은 해당 변화를 받아들여 Rebuild 한다.
ViewModel은 View 와 연결되지 않기를 원한다. 따라서, ViewModel 의 Publish 를 듣고 싶은 View는 스스로 Subscribe 해야 한다.
또한, MVVM 구조는 지역성이라는 특성을 가지는데 이는 View 를 그리는 모든 코드가 body 에 선언되어 있다는 Code 의 지역성과 View 가 단계적으로 그려지지 않고 한 번에 그려진다는 생성 시간의 지역성을 의미한다. 이러한 지역성은 MVVM 구조를 User Interface Programming 에 적합한 구조로 만든다.
'iOS 개발 > App 개발 관련' 카테고리의 다른 글
[iOS] GCD, 비동기 프로그래밍 (0) | 2022.01.29 |
---|---|
[iOS] AppDelegate, SceneDelegate 의 역할, WWDC2019 (iOS 13~) (0) | 2021.10.29 |
[iOS] 모의 URLSession 으로 네트워킹 Test 하기 (0) | 2021.07.30 |
[iOS] TDD(Test Driven Development) Tutorial (0) | 2021.07.16 |
[iOS] WWDC 2019 Testing in Xcode (0) | 2021.07.12 |