MVVM 이란
Model-View-ViewModel(MVVM)은 View Model이라는 새로운 컨셉을 포함시킨 디자인 패턴입니다.

MVVM 패턴은 위의 그림과 같이,
App의 데이터를 담당하는 Model
UI를 담당하는 View
Model과 View를 이어주는 ViewModel 로 이루어져 있습니다.
MVVM을 사용하는 이유
MVC 패턴은 ViewController의 역할이 커서, ViewController가 너무 비대해지거나,
View의 비즈니스 로직을 파악하기 어렵고, 테스트가 어렵다는 단점이 있습니다.
MVVM 패턴은 이와 같은 MVC 패턴의 단점을 ViewController를 더 심플하게 하고, 테스트하기 쉬운 ViewModel을 사용함으로써 극볼할 수 있습니다.
View Model ?
MVVM에서는 MVC에서는 없던 View Model이라는 개념을 사용하기 때문에,
View Model에 익숙해지는게 중요합니다.
View Controller는 View를 변화시키고, View Model에 View 인풋을 전달하는 역할만 맡습니다.
View Model은
1. Model input: view input처리, model 업데이트
2. Model output: model output을 view controller로 전달
3. Formatting: view controller가 화면에 표시할 수 있도록 data formatting
View Model의 Output을 View에 반영하기
MVVM 패턴에서 값이 변화할때 마다 View에 변화를 대응시키기 위해서는 View Model이 넘겨주는 결과를 처리할 필요가 있습니다.
iOS 프로그래밍에서는 이런 역할을 수행하는 방법이 크게 4가지가 있습니다.
1. Key-Value Observing (KVO)
KVO는 Key path를 활용하여 property가 변화하면 notification을 받는 방식입니다.
2. Functional Reactive Programming (FRP)
RxSwift, Combine 등에서 사용하는 방식으로, 이벤트와 data stream을 사용합니다.
3. Delegation
값의 변화를 처리해주기 위해 delegate method를 사용합니다.
4. Boxing
Property observer를 사용하여, 값의 변화에 대응합니다.