본문 바로가기
iOS/Design Pattern

Design Pattern - Model View ViewModel Pattern

by HaningYa 2020. 8. 24.
728x90

중급(책에 따르면) 디자인 패턴 시작이다.

이전까지 배운 기초 패턴은 다음과 같다.

  1. MVC
  2. Delegation
  3. Strategy
  4. Singleton
  5. Memento
  6. Observer
  7. Builder

어떤 패턴인지 알고 사용한 경우도 있었고

코드 컨벤션인줄 알고 아 이렇게 쓰나보다하고 썼던 코드가 디자인 패턴이였구나 알게된 경우도 있었고

써보지도 않았고 처음 알게된 경우도 있었다.

그럼 중급 패턴으로 한번 가보자


MVVM - Model View ViewModel 

출처: DesignPattern by tutorial (Raywenderlinch)

MVVM은 각각의 객체들을 3가지 그룹으로 나누는 Structural design pattern 이다.

  • Model: 앱 데이터를 담고있다. 대부분 구조체이거나 단순한 class 로 구성된다.
  • Views: 시각적인 요소와 스크린의 control를 담당한다. UIView의 서브클래스로 구성된다.
  • View models: model 에 있는 정보를 화면에 보여줄 수 있는 형태로 가공한다. Class 를 사용하기 때문에 reference 로 여기저기에서 참조되며 사용할 수 있다.

MVC 패턴과 비슷하게 보인다. MVVM 에서도 View controller 는 있지만 하는 역할은 최소로 줄어든다. 그래서 MVC 패턴에서 View controller 에 코드양이 많아지는 문제를 MVVM 을 통해 해결할 수 있다. View controller 의 책임을 ViewModel 이 나눠 갖는 느낌이다.


MVVM 은 언제 사용해야 할까

model 의 데이터를 view 에 맞게 가공해야 할때 사용한다. 예를들어 view model에 Date 타입을 String 타입으로 바꾸는 코드를 작성하거나 Decimal 타입을 달러나 원과 같은 화폐단위를 붙인 String으로 바꾸는 코드를 작성할 수 도 있다.

이 패턴은 view model 을 빼면 MVC랑 동일하다. 하지만 View Model 의 코드가 view controller 에 전부 몰리기 때문에 문제가 생긴다.

이미 view controller 는 view life cycle 과 IBActions들의 callback 과 다른 여러 일들을 이미 하고 있기 때문에 MVC(Massive View Controller)가 될 수 있는 문제가 있다. 

view controller 가 모든 일을 하지 않도록 하기 위해선 MVVM 을 쓰면 된다. 

Decoupling, 결합도를 낮추는 건 소프트웨어 공학적으로도 좋은 소프트웨어가 되는 조건중 하나이다.


MVVM 을 사용할 때 주의할 점 

  • model - to - view 에서 많은 데이터 변환이 필요할 때 좋다. model 인지 view 인지 view model 인지 모호한 객체들이 있다. 이럴 땐 MVVM 과 더불어 다른 design pattern을 사용해야 한다.
  • MVVM은 처음 application을 만들때 적합하지 않다. 만약 처음 만드는 것이라면 MVC로 시작하는게 좋을 수 도 있다. 앱의 요구사항이 바뀔 수 도 있고 그에 따라 다른 디자인 패턴을 차용해야 할 경우도 있기 때문이다. 나중에 정말 필요할 때 MVVM을 적용하는 것이 좋다.
  • 바꾸는걸 두려워 하지 마라. 대신 미리 계획해라(응?)

MVVM 요약

  • MVVM 은 view controller 의 코드라인을 줄여 관리가 수월하게 할 수 있다.
  • view model 은 객체를 다른 객체로 변환하는데 쓰여진다. 변환된 객체는 view controller 를 통해 view 에 표현된다. 
    데이터에 추가적인 계산이 필요한 작업에 쓰인다.
  • view model을 하나의 view 와 사용한다면 모든 configuration을 view model 에 몰아도 되지만, 하나 이상의 view 에 사용할 경우  헷갈릴 수 있다. 이럴 땐 각각의 view 에 맞는 configure code 를 가지는게 단순하게 좋다.
  • 앱의 규모가 작을 경우 MVC 로 시작하기 좋다. 만약 앱의 요구사항이 달라지면 그에 따라 적절한 design pattern을 골라 쓰면 된다.

 

MVVM 예제(RxSwift 를 사용하지 않은)

[포스팅]

 

iOS - MVVM Simple look

[원문] MVVM in iOS Reduce the size of your massive view controller by moving logic into the view model medium.com 로직부분을 viewmodel 로 옮겨 MVC(Massive view controller) 의 크기를 줄이자. 기본 iOS..

haningya.tistory.com

[코드]

 

KimTaeHyeong17/iOS-MVVM-SimpleProject

간단한 기능의 앱으로 MVVM 패턴 연습. Contribute to KimTaeHyeong17/iOS-MVVM-SimpleProject development by creating an account on GitHub.

github.com

 

 

728x90

'iOS > Design Pattern' 카테고리의 다른 글

Design Pattern - Adapter Pattern  (0) 2020.08.30
Design Pattern - Factory Pattern  (0) 2020.08.25
Design Pattern - Builder Pattern  (0) 2020.08.09
Design Pattern - Observer Pattern  (0) 2020.08.09
Design Pattern - Memento Pattern  (0) 2020.08.09

댓글