[Sesac IOS] 42일차 TIL
TIL

[Sesac IOS] 42일차 TIL

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를 분리하기 어렵고 재사용이 어렵다는 단점이 있음.

좌 : 애플이 제시한 Cocoa MVC, 우: 실제 사용되는 Cocoa MVC

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 역할

MVVM in iOS

 


이상입니다.

'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