iOS 개발일지
0831 새싹 42회차 정리 - MVVM 맛보기 본문
iOS 앱 개발자 데뷔 과정 42회차
#1. Checklist
- MVC
Model-View-Controller 로 앱의 한 화면, 즉 앱의 한 부분을 제어하기 위해서 MVC 패턴 하나가 사용된다.
실제로 앱은 여러 MVC 패턴으로 이루어져 있어, 여러 MVC가 서로 관계를 갖는 형태가 된다.
- Controller : 아웃렛 변수나 인스턴스 변수를 통해 View에 항상 접근이 가능하며, Model에 대한 모든 것을 알고있다.
- Model : 화면과는 상관없이 UI와 독립적인 구조로 이루어져있고, 모든 의사소통은 Controller를 통해 전달된다.
값이 변경되는 데이터를 Model이 가지고 있는 경우에는 Notification, KVO 등을 통해 Controller에게 알린다.-
- View : 애플이 몇년 전부터 만들어놓은 일반화된 객체를 통해 View를 사용하기에 제한적인 소통만 가능하다.
View는 어떤 뷰컨트롤러 클래스에 속해있는지 모르는 상태로, 객체에 대해 알고있는 바가 없기 때문에 미리 서술되어 있는 방식 (Target - Action / @IBAction) 으로 Controller와 소통한다.
View는 Model에 영향을 줄 수도 있기 때문에, 터치 이상으로 더 복잡한 소통 등을 해야 할 경우 프로토콜 (Delegate, Datasource 등) 을 통해 Controller에 책임을 위임한다.
- MVVM
Model-View-ViewModel 로, View (UI 관련 코드) 와 Model을 명확하게 분리하는 것이 목적이다.
Model의 모든 변화를 View가 파악하고 UI 업데이트를 할 수 있어야 하며, ViewModel을 통해 UI와 비즈니스 로직을 분리한다.
MVC의 Controller 대신 ViewModel을 다루게 되며, MVC의 Controller는 View로 취급된다.
- ViewModel : UI와 비즈니스 로직을 분리하기 위해 사용되며 Model을 참조한다.
View로부터 변경 사항을 받아 Model을 업데이트하고, Model이 변경되면 View에 반영한다.
Interpreter 역할을 담당하며, View에 변경 사항을 직접 알리지는 않고 변경이 되었다고 발표 (Publish) 만 한다.
- View : ViewController를 View로 취급하며 ViewModel을 참조한다.
모든 비즈니스 로직이 ViewModel에 들어있기 때문에, View와 ViewController에 관련된 코드가 줄어든다.
View는 ViewModel이 발표 (Publish) 한 내용을 구독 (Subscribe) 하고 관찰 (Observe) 한다.
- Model : View와 독립적이므로, UIKit과 SwiftUI 등을 import 하지 않는다.
Model이 변경되었을 때 ViewModel에게 변경된 사실을 알려준다.
오늘 맛보기로 실습한 코드로, 이해를 위해 RxSwift를 사용하지 않고 직접 간단하게 작성했다.
# 유용한 오픈소스
SwiftLint : https://github.com/realm/SwiftLint
코드에 룰을 규정해 코드 스타일을 통일시키고, 규칙적인 코드를 짤 수 있다.
SwiftGen : https://github.com/SwiftGen/SwiftGen
프로젝트의 리소스를 자동으로 Swift 코드로 생성해준다.
Hero : https://github.com/HeroTransitions/Hero
화면을 전환할 때 자연스럽게 애니메이션 효과를 추가한다.
'SeSAC iOS 데뷔과정 2기' 카테고리의 다른 글
0902 새싹 44회차 정리 - GCD (0) | 2022.09.02 |
---|---|
0901 새싹 43회차 정리 - MVVM 맛보기2 (0) | 2022.09.01 |
0830 새싹 41회차 정리 (0) | 2022.08.30 |
0829 새싹 40회차 정리 - Codable (0) | 2022.08.29 |
0828 새싹 8주차 마무리 (0) | 2022.08.28 |