MVC
MVC = Model + View + Controller
- Model : 데이터와 비지니스 로직을 처리하는 부분
- View : 사용자에게 보여지는 UI 부분
- Controller : Model과 View 의 중간다리 역할
MVC의 동작
1. View가 사용자 액션을 받은 것을 Controller에게 전달
2. Controller가 View에게 사용자 Action을 받아 Model을 업데이트
3. Model의 데이터 변화를 다시 View에게 전달
애플은 이 MVC 패턴이 Cocoa 프레임워크 기반의 앱을 위한 가장 좋은 디자인이라고 표현을 했다.
하지만 현실적으로 큰 프로젝트에서는 애플이 말한 것처럼 이상적인 MVC가 아니었다.
ViewController도 자신의 View를 가지고 있고 온전한 Controller로서의 역할을 할 수 없다.
이러한 문제점 때문에 Cocoa 프레임워크에서의 MVC 패턴에 한계가 생기게 된다.
MVC 패턴은 View와 Controller가 강하게 연결되며 Controller가 대부분의 일을 다 하게 되는 문제가 생겨 프로젝트 규모가 작을 때는 괜찮지만, 프로젝트가 커질수록 Controller가 비대해지며 내부 구조가 복잡해지기 때문에 유지보수가 힘들어지게 된다. (MVC는 Massive ViewController라는 별명도 있다고 한다)
현재 애플 MVC 설명 공식 문서에 Retired Document라고.. 현재 개발환경에서는 최선이 아닐 수도 있다고 한다.
MVVM
MVVM = Model + View + ViewModel
Model : 데이터와 비지니스 로직을 처리하는 부분
View : 사용자에게 보여지는 UI
ViewModel : View를 나타내 주기 위한 Model이자 View를 나타내기 위한 데이터 처리를 하는 부분
MVVM 의 동작 - 단방향 패턴
1. View를 통해 사용자의 Action을 받는다.
2. View에 들어온 Action을 Command 패턴으로 ViewModel에 전달한다.
3. ViewModel은 Model에게 데이터를 요청하고 Model은 응답한다.
4. ViewModel은 응답받은 데이터를 가공한 후 가지고 있는다.
5. View는 ViewModel과의 데이터 바인딩을 통해 화면에 나타낸다.
이러한 MVVM의 로직은 RxSwift가 기반이 될 때 엄청 파워풀 해진다고 한다.
'아키텍처+디자인패턴' 카테고리의 다른 글
DIP (Dependency Inversion Principle) (2) | 2022.07.14 |
---|---|
ReactorKit Framework (0) | 2022.06.09 |
Delegate 패턴 (0) | 2022.02.09 |
다중 스레드 환경에서 싱글톤 패턴 : Synchronized / DCL(Double Checked Locking) / Demand(Lazy) Holder (0) | 2021.10.20 |
단일스레드 환경에서 싱글톤 패턴: Eager Initialization / Lazy Initialization (0) | 2021.10.20 |