CS/기타
MVC에서 MVP를 거쳐 MVVM까지
Sueaty
2021. 10. 19. 03:07
누군가 제게 MVC, MVP, MVVM 각각에 대해 설명을 해보라고 한다면 어렴풋이 설명은 할 수 있다고 생각해요.
그런데 아마 각 객체의 역할과 관계 정도만 간단하게 말할 수 있을 것 같더라구요.
그래서 제가 나름 신뢰할 수 있는 사이트, 개발자 분들의 글과 영상을 요약해서
MVC, MVP, MVVM의 특징에 대해 요약해 보려고 합니다.
MVC
VIEW | CONTROLLER | MODEL |
사용자의 입력을 받음 | view가 받은 사용자 입력으로 model 업데이트, 업데이트 된 모델로 view를 업데이트 | data와 관련 |
이상적인 방식은 delegation pattern을 사용한 view와 model의 중간 다리 역할 (ex. UITableView의 UITableViewDataSource) |
[ex] persistence, model objects, parsers, managers, networking |
MVC → MVP
- view controller가 부담해야할 일이 너무 많아졌음
- view와 controller이 너무 밀접(controller가 view의 ife cycle에 지나치게 관여)해서 재사용성이 떨어지고 테스트가 어려움
MVP
VIEW | PRESENTER | MODEL |
view + view controller | input과 ouput에 대한 로직 처리 | |
input을 받아 presenter에게 전달 | view가 무엇을 보여줘야 하는지 알려줌 |
- 로직(presenter)과 뷰가 분리되며서 test가 가능한 구조가 됨
- view를 쉽게 mock 할 수 있고 presenter는 레이아웃과 관련 된 코드는 전혀 없음
MVP → MVVM
- view 하나에 presenter 하나가 필요해서 비슷한 화면과 로직을 가지더라도 presenter를 무조건 만들어야 함
MVVM
VIEW | VIEW MODEL | MODEL |
view model을 관찰하고 있음 | 화면에 그릴 요소를 갖고 있음 (그릴지 말지 판단은 view의 몫) |
|
view 업데이트에 대한 판든을 스스로 함 | 모델과 소통하고, view는 신경쓰지 않음 |
- 화면과 로직이 비슷하다면 같은 view model을 사용해도 됨 (MVP는 view : presenter = 1 : 1 이었음)
- view model: model의 변화를 유발하고, 업데이트 된 model을 가지고 스스로 업데이트 한다