모델은 데이터들을 관리하고, 뷰는 화면을 그려주고, 컨트롤러가 뷰와 모델의 중개자 역할을 맡고 있습니다. 또한 사용자의 입력(input)은 컨트롤러를 통해 처리됩니다.
장점
- 동시다발적 개발이 가능(프론트엔드와 백엔드)
- 높은 응집도
- 개발용이성 (책임이 구분되어 있어 코드 수정이 용이)
단점
- 컨트롤러가 다수의 뷰를 선택할 수 있어서 하는 일이 너무 많아질 수 있다.
- 코드 일관성 유지에 노력이 필요함.
- 뷰와 모델 사이의 의존성이 높다. (높은 의존성은 규모가 커질수록 유지 보수가 어려움)
장점 model과 view간의 결합도를 낮추면 새로 추가 및 수정에 대해 해당 부분만 코드 수정하면 되기 때문에 확장성이 좋아지고, 유닛테스트시 테스트코드를 작성하기 편리해진다.
단점
애플리케이션이 복잡해질수록 view와 presenter사이의 의존성이 강해지는 단점이 존재.
mvc의 controller처럼 presenter도 어느정도 시간이 지나면 비즈니스 로직이 집중되는 경향이 있음.
MVC 패턴의 단점인 View와 Model 사이의 의존성은 해결되었지만,View와 Presenter가 1:1 로 매칭되기때문에 뷰가 많아짐에 따라서 Presenter도 따라서 같이 생성되게 됨.
Model, View, ViewModel로 구성되어 있으며 Model과 View는 다른 패턴과 동일합니다.
웹 기술이 점점 진화하면서 우리가 사용하고 있는 하나의 서비스는 엄청나게 크고 복잡한 형태로 되어있습니다. 그렇기 때문에 MVC패턴에는 한계가 있을 수 밖에 없습니다.
즉 모든 데이터를 서버에서 처리하는 것은 매우 많은 서버 비용과 부담이 컸기 때문입니다.
그래서 이를 보완하기 위해 웹 화면상에 데이터를 처리하고 이를 바로 실시간으로 동적으로 화면의 뷰를 변화시킬 수 있도록 하기 위해 탄생한게 바로 MVVM패턴이라고 할 수 있습니다.