Model-View-Controller

Model은 데이터를 의미한다.
Controller가 거의 대부분의 일을 다한다는 단점이 있다. (너무 비대해진다)

Ex)
class ViewController {
private var articleListVM: ArticleListViewModel!
self.articleListVM = ArticleListViewModel(articles: articles)
}
Model-View-ViewModel
SwiftUI와 RxSwift 기반 앱 개발에서 활용되는 패턴
Controller의 역할을 ViewModel이 대신한다.
View와 Model 사이에 바인딩(binding)을 통해 데이터의 변화를 자동으로 반영한다.
Controller의 역할을 줄이고 테스트 용이성을 높일 수 있다.
단방향으로 데이터가 흐름( ↓ 실선 )

View와 ViewModel을 바인딩하기 때문에 코드의 양이 작다. (장점)
View와 ViewModel(Store)의 관계가 N:1이다.
간단한 UI에서는 오히려 ViewModel을 설계하는 어려움이 있다.
Data Binding이 필수적으로 요구된다.
복잡해질수록 MVC패턴의 Controller처럼 ViewModel이 빠르게 방대해진다. (단점)
표준화된 틀이 존재하지 않아 사람마다 이해가 다르다.

