brunch

You can make anything
by writing

C.S.Lewis

by 윤민섭 Dec 04. 2020

MVVM Pattern

MVC 말고 MVVM

iOS 앱 개발을 할 때 MVC 패턴을 많이 경험했습니다. MVC 패턴으로 코드를 구현하다 보니 ViewController에 많은 양의 코드가 작성된다는 것이 문제였습니다. 또한 ViewController가 논리적인 코드와 뷰를 업데이트하는 코드가 함께 있다 보니 테스트하기도 어려웠죠.

이런 일련의 문제를 해결하기 위해 MVVM 디자인 패턴이 제안되었습니다.



Model 객체는 데이터 로직을 담당합니다.

ViewModel 객체는 Model로부터 정보를 가져와 View에 어떻게 보여줄지 결정합니다.

View 객체는 화면에 보일 요소를 관리합니다.


먼저 Model과 ViewModel의 관계를 코드로 보겠습니다.

Model은 서버에 데이터를 요청하고 모든 응답이 성공한다 가정하고 구현합니다.



클래스 다이어그램 상 ViewModel은 Model을 소유하고 (연관) Model은 ViewModel에게 의존한다고 되어있습니다. 즉, ViewModel은 Model을 Property로 갖고 있으며, Model의 메서드를 호출할 때 ViewModel의 메서드를 호출할 수 있다는 것을 의미합니다.



ViewModel과 Model의 관계가 눈에 보이시나요?  ViewController와 View의 관계는 MVC에서도 다뤘기에 넘어가겠습니다. ViewController와 ViewModel의 관계를 보겠습니다.

ViewController는 ViewModel을 소유하고 ViewModel은 ViewController에 의존합니다. ViewModel-Model 관계와 동일합니다. ViewController 코드를 보겠습니다. View는 UITableView로 구성되며 이는 스토리보드에 구현했습니다.



ViewController는 ViewModel에게 받는 output 처리를 구현해두고 각 상황에 맞게 input을 넣어주면 됩니다. 현재는 UITableView를 사용했기 때문에 viewModel로부터 변화가 생길 때 reloadData()만 호출했지만, UITableView가 아니라면 각 View를 업데이트하는 코드를 추가할 수 있습니다.


읽어주셔서 고맙습니다.




Raywenderlich의 Design Patterns by Tutorials를 참고했습니다.

https://www.raywenderlich.com/books/design-patterns-by-tutorials/v3.0

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari