42일차 수업 내용을 공부한 글입니다.
Learned
MVC
1. 개요
- Model-View-Controller로 이루어진 iOS의 대표적인 아키텍쳐 패턴으로서
일반적으로 하나의 앱 화면을 제어하는데 최소 하나의 MVC 패턴이 사용됨.
2. Model
- 데이터의 구조를 정의하는 영역으로 View(UI)와 상관없는 독립적인 영역임.
- Model 밖의 다른 영역과 의사소통은 Controller를 통해 전달되며
그 방식으로 Notification이나 Key-Value Observing(KVO)이 사용됨.
Key-Value Observing
객체 프로퍼티의 변경사항을 다른 객체에 알리기 위해 사용하는 프로그래밍 패턴
3. View
- 화면에 보여지는 시각적인 UI를 담당하는 영역으로 UIView 객체가 이에 해당됨.
- Controller의 요청에 의해 UI를 업데이트하고 사용자의 액션을 Controller에게 전달하며,
전달 방식으로 Target-Action 패턴이 사용됨. - Model이 관여되는 복잡한 소통을 해야할 경우 Model과의 독립성을 확보하기 위해
프로토콜(Delegate, Datasource) 을 통해 Controller에게 책임을 위임함.
ex) 테이블뷰에서 셀을 스와이프하여 데이터를 삭제하는 경우
4. Controller
- Model과 View를 연결하는 부분으로, View에서 발생한 사용자의 상호작용을 바탕으로
Model을 변경하거나 Model에서 발생한 변경사항을 View에 업데이트하는 역할 - View와 Model의 의사소통을 받아 전달하는 중재자이며 UIViewController 객체가 이에 해당됨.
- MVC 패턴이 적용된 실제 iOS에서 Controller는 Model을 소유하고 UIView의 생명주기를 관리함.
즉, Model과 View가 Controller에 의존적임. - 그렇기 때문에 View와 Controller를 분리하기 어렵고 재사용이 어렵다는 단점이 있음.
MVVM
1. 개요
- Model-View-ViewModel로 이루어진 아키텍쳐 패턴으로
MVC의 비즈니스 로직(데이터 가공)을 ViewModel로 분리한 것이 특징임.
비즈니스 로직 : UI에 데이터를 그대로 표시하지 않고 데이터를 가공하는 로직
2. Model
- 데이터 구조를 정의하고 View(UI)와 완전히 독립적인 영역임.
- Model이 변경됐을 때 ViewModel에게 변경 사실을 알림.
3. View
- 사용자의 상호작용을 ViewModel로 전달하며 ViewModel의 요청으로 UI를 업데이트함.
- ViewModel의 발표(Publish)를 구독(Subscribe)하고 관찰(Observe)함.
- UIViewController 객체가 이에 해당되고 MVC 패턴의 Controller에 비해 가벼움.
(비즈니스 로직을 ViewModel에서 처리하기 때문)
4. ViewModel
- View에서 보낸 사용자의 상호작용에 대한 이벤트를 처리하고 Model을 업데이트함.
- Model의 변경 사실을 View에게 알림(변경 사항이 발생했다고 Publish함)
- View와 Model에서 보내는 신호를 통역하는 Interpreter 역할
이상입니다.
'TIL' 카테고리의 다른 글
[Sesac IOS] 45일차 TIL (0) | 2022.09.07 |
---|---|
[Sesac IOS] 43~44일차 TIL (0) | 2022.09.05 |
[Sesac IOS] 41일차 TIL (2) | 2022.08.31 |
[Sesac IOS] 40일차 TIL (0) | 2022.08.31 |
[Sesac IOS] 39일차 TIL (0) | 2022.08.29 |