티스토리 뷰
When should you use it?
언제 MVVM(Model-View-ViewModel)을 사용해야 할까?
만약 모델을 뷰모델을 통해 뷰에 맞는 값으로 변환해서 뷰를 표현하고 싶다면, MVVM 디자인패턴을 사용할 수 있습니다.
예를 들자면, 날짜 표기에 사용되는 Date구조체를 날짜 포맷화 된 String 문자열로 변환하거나 이와 같은 많은 경우의 변환이 필요할 경우, MVVM의 VM, 뷰모델(ViewModel)이 사용되어질 수 있습니다.
Massive ViewController
비대한 뷰컨트롤러
지금 이야기하고 있는 MVVM(Model-View-ViewModel) 디자인 패턴은 MVC의 단점을 보완하고 있는 디자인패턴입니다.
만약 뷰모델(ViewModel)이 없다면, 모델에서 뷰로 변환하는 과정의 코드를 뷰컨트롤러(ViewController)에서 전담하게 됩니다. 하지만, 뷰컨트롤러는 이미 이 외의 다른 작업도 맡아 수행하고 있지요. 예를들면 viewDidLoad, viewWillAppear, viewDidAppear 등의 생애주기 이벤트 관리, IBAction 등의 콜백처리 등 다른 작업들 또한 수행하게 됩니다.
이렇듯, 뷰컨트롤러가 모델의 뷰 적용, 생애주기관리, 콜백처리 등 다양한 역할을 수행하게 되면서 비대한 뷰컨트롤러를 초래할 수 있게 되는데 이를 흔히, "비대한 뷰컨트롤러(Massive ViewController)" 라고 부릅니다.
How to Solve Massive ViewController
비대한 뷰컨트롤러 문제를 해결하는 방법
그렇다면, 어떻게 이러한 MVC(Model-View-Controller)의 Massive ViewController와 같은 문제점을 해소할 수 있을까요? 그 방법은 짐작이 가실겁니다. 🤗
바로 MVC 패턴 대신 다른 디자인패턴을 사용하는 것이지요. 이때 MVVM(Model-View-ViewModel)패턴의 사용은 모델을 뷰로 변환해야하는 작업(Model-to-View)을 요구하는 경우, Massive ViewController를 해결하는 좋은 방법이 될 수 있습니다. 또한 MVVM은 MVC에 비해 Testability(테스트 가능성)의 관점에서도 장점을 갖고 있는 패턴입니다.
지금까지 애플에서 기본적으로 제공하는 디자인패턴인 MVC 대신 MVVM 디자인 패턴을 사용하는 이유에 대해서 알아봤습니다. 이처럼 각각의 디자인패턴은 저마다의 장단점을 갖고 있으며, 프로젝트의 성향이나 규모에따라 적절한 패턴을 사용하기 위해서는 다양한 디자인패턴에 대한 이해와 응용력이 있어야할 것 같습니다. 🤯
'iOS 개발' 카테고리의 다른 글
iOS Swift 디자인패턴, MVVM 사용 전 생각해볼 사항 (0) | 2020.06.27 |
---|---|
iOS swift 디자인패턴, MVVM패턴 코드 구성하기 (0) | 2020.06.26 |
iOS MVVM 디자인패턴, Model-View-ViewModel 개요 (0) | 2020.06.24 |
iOS leastNonzeroMagnitude, leastNormalMagnitude 알아보기 (0) | 2020.06.11 |
swift 문자열 처리 메서드, split과 components 간단 비교 (0) | 2020.06.09 |
- Total
- Today
- Yesterday
- CoreML
- Collection
- 알고리즘
- 부스트코스
- 백준알고리즘
- createML
- swift string
- 프로그래머스swift
- 김프매매
- publisher
- swift문제
- swift알고리즘
- swift reduce
- ios
- 스위프트
- Protocol
- swift언어
- 자연어처리
- 개발자문서
- 알고리즘문제
- 프로그래머스
- uikit
- swift 문자열
- 백준swift
- 컬렉션
- Swift 알고리즘
- swift
- SwiftUI
- swift 기초
- 프로토콜
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |