본문 바로가기
Design Patterns

[Design Patterns] MVC, MVVM

by thoonk: 2021. 2. 9.

디자인 패턴

디자인 패턴은 소프트웨어를 설계하면서 자주 발생하는 문제들을 피하기 위해서 재사용이 가능한 해결책이다.

과거의 소프트웨어 개발을 하면서 발견된 규칙을 이후에 재이용하기 좋게 정리한 것이며 프로그래머들 간의 의사소통의 효율성을 높여준다. 


MVC (Model-View-Controller)

Model : 앱에서 사용되는 데이터를 읽고 쓰기 및 데이터 처리를 하고 변경 사항을 controller에 보낸다. (비즈니스 로직)

View : 데이터를 화면에 보여주는 역할을 하고 사용자의 입력을 controller로 보낸다. 

Controller : model과 view 사이에서 다리 역할을 하면서 업데이트시킬 수 있다. 

 

특징

  • Controller와 View는 1:N 관계이다.

 

Apple MVC

애플의 MVC 패턴은 View와 Controller가 강하게 연결되어 있는 것을 볼 수 있다. View와 Controller의 역할이 나뉘어져 있지 않고 Controller는 View와 Model의 다리 역할을 하지 않는다. 그렇기 때문에 Controller에 많은 로직이 있어 코드가 길어진다. 그리고 앱을 테스트할 때, View와 Controller는 강하게 연결되어 있기 때문에 각각 테스트하기 어렵다는 단점이 있다. 

 

장점:

  • 간단한 프로젝트를 역할을 나눠서 쉽고 빠르게 구현을 할 수 있다.

단점:

  • 앱이 커질수록 컨트롤러에서 감당하는 부분이 너무 커져 Massive VIew Controller라는 말도 생겼다.
  • 유지보수 및 테스트가 어렵다.

MVVM(Model-View-ViewModel)

Model : 앱에서 사용되는 데이터를 읽고 쓰기 및 데이터 처리를 한다. 

View : 데이터를 화면에 보여주는 역할을 한다. Command 패턴을 이용해서 ViewModel에게 user actions을 전달한다. 

ViewModel : 비즈니스 로직을 관리하고 Model과 View 사이에서 통신한다. Data Binding을 이용해서 View를 output에 따라 UI를 업데이트해준다.

 

특징:

  • ViewModel과 View는 1:N 관계이다. 
  • ViewModel과 View를 binding할 때는 주로 Rx를 사용한다. 
  • MVVM은 Command와 Data Binding을 이용하여 구현되었고 두 패턴으로 ViewModel과 View 사이의 의존성을 제거했다.

장점:

  • Unit Test하기 좋다.
    • ViewModel과 View와 의존성이 없다. 즉, ViewModel을 test input으로 테스트할 수 있고 View 또한 test input과 Mock(모의) ViewModel을 이용해서 UI를 테스트할 수 있다. 
  • 의존성이 없고 독립적이기 때문에 유지보수하기 좋다. 

단점:

  • ViewModel의 설계가 쉽지 않다. 

 

참고:

developer.apple.com/library/archive/documentation/General/Conceptual/CocoaEncyclopedia/Model-View-Controller/Model-View-Controller.html#//apple_ref/doc/uid/TP40010810-CH14

moralalberto.github.io/2016/01/10/model-view-controller.html

github.com/fimuxd/RxSwift/blob/master/Lectures/23_MVVM%20with%20RxSwift/Ch.23%20MVVM%20with%20RxSwift.md

beomy.tistory.com/43

'Design Patterns' 카테고리의 다른 글

[Design Patterns] Clean Architecture  (0) 2024.03.12
[Design Patterns] ReactorKit  (0) 2023.01.10

댓글