디자인 패턴이란
- MVC와 MVVM 모두 소프트웨어 디자인 패턴의 하나 입니다.
- 디자인 패턴은 개발 과정에서 흔히 발생하는 문제를 해결하기 위해 사용되는 일종의 템플릿입니다.
- 즉 디자인 패턴은
이걸 쓰면 이전보다 코드도 덜 꼬이고 코드 수정도 더 편리해질 꺼야
라며 똑똑한 사람들이 제안한 작업 방식이며, 여러 사람들과 작업방식을 유사하게 진행하면서 협업을 편리하게 만들고 문제 해결에 대한 도움을 쉽게 받을 수 있게 만드는
개발자끼리의 작은 약속입니다.
MVC
MVC는 Model, View, Controller를 뜻합니다
- MVC 패턴은 유저의 요청을 다음과 같이 처리합니다.
Controller
에서 유저의 요청사항을 받아 Model
에게 명령을 보냅니다 (보다 정확히는 명령이 아니라 Model
을 새롭게 업데이트 합니다)
Model
은 해당 명령을 처리한 뒤 View
에게 이를 전달합니다
View
는 모델에게 받은 내용을 최종적으로 유저에게 보여드립니다
MVC 패턴은 분업과도 같습니다
- A,B,C 3명이 함께 운영하는 식당을 가정해 보겠습니다.
- 식당은 손님이 오면
메뉴를 주문받아
요리를 하고
요리를 손님에게 드려야
합니다
- 3명의 손님이 들어왔는데 A,B,C가
각자 메뉴를 받고 요리를 한 뒤 손님에게 요리를 드리면
식당이 매우 혼잡할 겁니다
- 하지만 분업을 통해 A는 홀에서
메뉴 주문만 받아서
B에게 전달하고, B는 주방에서 요리만 해서
C에게 전달하고, C는 B가 한 요리를 손님에게 서빙하는 일만
담당하면 식당은 깔끔하면서도 효율적으로 운영될 수 있습니다
- 이처럼 정해진 위치에서 정해진 역할을 수행하는 간단한 약속이 바로 MVC 패턴 입니다
MVVM
MVVM은 Model ,View, ViewModel을 뜻합니다
- MVVC 패턴은 유저의 요청을 다음과 같이 처리합니다.
* View
에서 유저의 요청사항을 받아 ViewModel
에게 전달한 뒤 ViewModel을 계속 관찰합니다
ViewModel
은 Model
에 요청사항을 전달합니다
Model
은 해당 명령을 처리한 뒤 ViewModel
에게 이를 전달합니다
* ViewModel
이 Model
의 요청사항을 반영하면 ViewModel
을 관찰하고 있던 View
가 이를 반영해 고객에게 정보를 보여줍니다
- MVVC 패턴의
ViewModel
과 View
는 1:n의 관계입니다 .
MVVM은 MVC와 뭐가 다를까?
- MVVM 패턴은 MVC 패턴과 달리 View와 Model 사이의 의존성이 없습니다.
- 그 이유는 MVVM 패턴에
Command 패턴
과 Data Binding
이 사용되기 때문입니다.
- Command 패턴: 요청을 객체의 형태로 캡슐화한 것. 누가 무엇을 해야할지에 대한 명령을 객체로 만들어 관리하는 것.
(저는 '따로 관리해주는 객체가 존재하기 때문에 의존성이 줄어든다'라고 이해했습니다)
- Data Binding: 제공자와 소비자로부터 데이터 원본을 결합시켜 이것들을 동기화하는 기법
(View
와 ViewModel
이 묶여 있기 때문에 ViewModel
을 관찰하는 것만으로 View
의 정보가 자동으로 업데이트되며, View
는 Model
이 아닌 ViewModel
에만 관심을 쏟기 때문에 View
와 Model
의 의존성이 없어진다'라고 이해했습니다)
- 조금 더 직관적으로는
View와 Model 사이에 ViewModel이라는 중간다리를 놓아 의존성을 없앤 것
이 MVVM라는 느낌을 받았습니다.
References