sub system
, component
, module
과 같은 관계 구성 요소 사이의 관계 구조를 설계하기 위해 기술적으로 축적된 해결 방법 또는 기본 system 틀Architecture pattern
과 비슷하지만 보다 좁은 의미의 특정한 상황에서 구조적인 문제를 해결한 설계 방법 또는 해결하는 방식위 두 pattern을 간단하게 비교한 이유는 단순히 MVC pattern
을 공부하기 위해 찾아보다가 MVC
를 Architecture pattern
으로 기술한 자료도 있고 Design pattern
으로 기술한 자료도 있어 좀 더 정확하게 공부해야겠다 싶어 찾아보고 일단 간단하게 개념만 정리했다.
MVC
자료를 찾아보니 MVP
와 MVVM
같은 pattern이 MVC
에서 파생되었다고 하는데 위키백과에 따르면 MVC
는 Design pattern
이라 기재되어 있고 MVP
,MVVM
은 Architecture pattern
에서 파생되었다고 기재되어 있다.
찝찝한 마음으로 일단은 유추를 한다면 MVC pattern
도 Architecture pattern
에서 파생되었다고 일단 정리하고 후에 더 많은 자료와 관련 서적도 찾아보고 정확하고 확실한 개념 정리가 필요하다.
MVC
는 Model
, View
, Controller
의 합성, 축약어로 Web 구조를 설계할 때 위 세 역할로 나누어 설계하는 Design pattern
이다.
상태 변경과 같은 Event가 발생하는 것을 Action
이라 하고 Controller
에서 발생한 Action
받아 Model
또는 View
로 알려준다.
Model : 저장되어 있는 상태의 변화가 생기면 Controller
와 View
에 전달 한다.
View : Model
에서 받아 온 상태 정보를 보여주는 역할
Controller : 사용자 Action
에 따라 Model
의 상태와 같은 정보를 어떻게 관리할 지, View
에서 Model
의 정보를 어떻게 출력할 지 관리한다.
최근에 side-project로 Back-end 개발을 하면서 Django
의 기본을 공부하면서 사용했던 경험이 있는데(아직 ing..), 딱 Django
가 MVC
를 명확하게 보여주는 framework라는 생각이 들었다.
Controller
, View
, Model
모두 의존 관계를 가지고 있어 규모가 클수록 로직이 복잡해지고 유지보수가 어렵다. Model
은 하나의 View
를 위한 정보를 가지고 있어 Model
을 다시 사용하기 어렵다.
MVP pattern
은 MVC
에서 파생되어 구조는 비슷하지만 Controller
가 아닌 Presenter
가 존재한다. MVC
에서는 Model
과 View
사이의 관계도 있었지만 MVP
에서는 Presenter
가 철저하게 View
, Model
을 관리한다. 또한 사용자의 Action
을View
를 통해 받는다.
Presenter
: View
에서 받아 온 Action
에 따라 Model
을 update하거나 Action
에 따른 출력 정보를 View
에게 다시 전달한다. View
와 Presenter
는 1:1 관계이고 View
는 Presenter
를 통해서만 Update가 가능하기 때문에 하나의 View
를 알고 있는 Presenter
를 다른 View
에서 다시 사용하기 어렵다.
MVVM pattern
은 모든 Action
에 관한 처리를 모두 View
에서 한다. MVC
와 MVP
의 Controller
, Presenter
가 필요 없고 정보 처리가 MVC
, MVP
보다 직렬적인 관계를 가진다. 대신 View
의 Model
정보를 처리하기 위한 ViewModel
이 존재한다.
MVVM
의 특징은 View
가 ViewModel
에서 변경 사항을 가져올 때 ViewModel
내 변수와 같은 정보 처리에 binding되어 ViewModel
의 변경된 정보가 View
에서도 바로 반영이 된다. 이를 Data binding
이라고 한다.
View
에 대한 처리가 복잡해질수록 ViewModel
에 대한 설계도 더 복잡해진다.
Reference
https://boxfoxs.tistory.com/394#recentComments
https://academy.realm.io/kr/posts/eric-maxwell-mvc-mvp-and-mvvm-on-android/