MVC패턴과 MVVM 패턴 #Swift

한담곰·2023년 7월 28일

쏘의 Swift_Study

목록 보기
7/15

안녕하세요... 오랜만입니다 ㅎ..😅

참고 강의 사이트 : 패스트캠퍼스

MVC 패턴

  • 앱 개발 시 Model, View, Controller 이렇게 세 가지 역할로 나누어서 개발하는 디자인 패턴이다. 각각의 객체가 앱에서 수행하는 역할을 정의하고, 이들이 서로 통신하는 방식을 정의하게 된다.

  • 애플이 말하는 MVC의 장점은 "재사용 가능성이 높고, 인터페이스가 더 잘 정의되며 쉽게 확장할 수 있다. 그리고 Cocoa Framework는 MVC 기반으로 하고 있다."


  • MVC 구조는... 위 사진을 보면 View와 Controller를 같이 이야기하고 있다. Model은 어떻게 따로 분리할 수 있지만, View와 Controller를 완전히 분리하여 개발하기엔 사실상 어렵다..... 그래서 순수한 MVC 패턴으로 개발하는 것과 순수한 MVC 패턴의 장점을 갖기엔 힘들다.

  • MVC 패턴은 비대한 ViewController를 필연적으로 만들게 되고, View이자 ViewController인 녀석들 때문에 대부분의 Notification연산, View의 Delegate, 비즈니스 Logic 모두 ViewController 상에서 이루어지게 된다.

따라서... Cocoa Framework 상에서 최고의 디자인 패턴은 MVC가 아니라는 것..


MVVM 패턴

  • MVVM 패턴은 Model, View, ViewModel로 이루어져 있다. View에 속하는 UIView, UIViewController는 각자의 ViewModel을 소유하고 있고, ViewModel은 View와 바인딩 되어 데이터나 사용자 액션을 주고받는다.

  • ViewModel은 자신의 Model을 가질 수 있는데, 이렇게 View로부터 받은 데이터나 사용자 액션을 Model을 통해서 비즈니스 로직을 처리한다. ViewModel과 Model을 통해 처리한 결과는 바인딩 된 View에 데이터의 형태로 전달이 되고, 전달된 데이터는 View에 업데이트된다.

  • MVVM 디자인 패턴은 Rx 코드의 기반이 될 때, Rx를 MVVM 패턴으로 디자인 된 앱 위에서 사용할 때 정말.. 좋다..!

  • MVVM은 View의 액션와 이벤트를 ViewModel로 전달시키고, 다시 Mode이라는 비즈니스 로직을 통한 Output을 다시 View에게 전달하는 단방향 디자인 패턴이다. 양방향도 물론 가능함!! 하지만 단방향으로 하는 것이 용이하기 때문에 보수 작업을 최소화할 수 있다는 장점이 있다.


MVC와 MVVM

MVC

  • View + Controller
  • 비즈니스 로직과 View가 혼합되기 쉽다는 단점

MVVM

  • Cocoa Framework 의존도가 낮다.
  • 순수한 비즈니스 로직 보존.
  • View가 ViewModel을 소유하고 있는 형태기 때문에 ViewModel은 View를 몰라도 되는 장점이 있다. 또, 하나의 View는 하나의 ViewModel을 소유하겠지만, 하나의 ViewModel은 결과적으로 나타내고자 하는 어떠한 로직만 같다면 얼마든지 재사용 가능하다는 장점도 있다.

  • 이러한 MVVM 패턴에서 View와 ViewModel을 바인드 하는 접착제로 RxSwift를 사용할 수 있다.

view.swift

버튼.rx.tap
	.bind(to: viewModel.버튼탭이벤트)
    disposed(by: disposeBag)
    
viewModel.맛있는버거세트
	.emit(onNext: {
    	print($0)  // 🍔🥤🍟
    })
    .disposed(by: disposeBag)

viewModel.swift

let 버튼탭이벤트 = PublishRelay<Void>()
let 맛있는버거세트 = Signal<String>

// ...

맛있는버거세트 = 버튼탭이벤트
	.map { _ in
    	"🍔🥤🍟"
    }
    .asSignal(onErrorJustReturn: "")
profile
iOS Developer

1개의 댓글

comment-user-thumbnail
2023년 7월 28일

유익한 글이었습니다.

답글 달기