MVC(Model-View-Controller) 패턴과 MVVM(Model-View-ViewModel) 패턴은 소프트웨어 개발에서 UI를 만들 때 사용되는 패턴이다. 두 패턴 모두 UI와 데이터 처리를 분리하여 코드를 재사용하고, 유지보수를 용이하게 하는 장점을 가지고 있다.
- Model
: 앱이 포함해야할 데이터가 무엇인지를 정의.
데이터의 상태가 변경되면 필요한대로 화면을 변경할 수 있도록 뷰에게 알리며 업데이트된 뷰를 제거하기 위해 다른 로직이 필요한 경우에는 컨트롤러에게 알린다.
- View
: 앱의 데이터를 보여주는 방식을 정의. 표시할 데이터를 모델로부터 받는다.
- Controller
: 사용자로부터의 입력에 대한 응답. 모델 또는 뷰를 업데이트하는 로직을 포함한다.
입력 폼과 버튼이 있을 때, 사용자 입력이 컨트롤러에게 전송되고, 업데이트된 데이터를 뷰로 전송한다.
단순히 데이터를 다른 형태로 나타내기 위해 뷰를 업데이트하고 싶을 때 (가격이 낮은 순서 또는 높은 순서로 정렬) 컨트롤러는 모델을 업데이트할 필요 없이 바로 처리할 수 있다.
웹 애플리케이션에서 사용자가 회원가입을 요청하면, Controller는 사용자의 입력을 받아 Model에 저장하고, 그 결과를 View에 반영하여 사용자에게 회원가입 완료 메시지를 보여준다.
😊장점
· 단순하고 직관적이며, 개발 속도 가속화가 가능
· 기능 별로 코드를 분리하여, 가독성과 코드 재사용 증가
· 각 컴포넌트가 자신의 수행 결과를 다른 컴포넌트에게 전달하는 프로그래밍 방식으로 결합도가 낮음
· 시스템 유지보수 시에 특정 컴포넌트만 수정하면 되기 때문에 보다 쉬운 시스템 변경이 가능
😥단점
· View와 Model 사이의 의존성이 높음
· View와 Model의 높은 의존성은 어플리케이션이 커질수록 복잡해지고, 유지보수가 어려움
복잡한 대규모 프로그램의 경우 다수의 View와 Model이 컨트롤러를 통해 연결되기 때문에 Controller가 불필요하게 커지는 현상이 발생한다. 복잡한 화면을 구성하는 경우에도 동일한 현상이 발생하는데 이를 'Massive-View-Controller' 라고 한다. 이런 문제점을 보완하기 위해 다양한 패턴이 파생되었고, 그 중 하나가 MVVM 패턴이다.
- ViewModel
View 를 표현하기 위해 만들어진 View 만을 위한 Model
Model을 View에 를 표시하기 위한 처리를 하는 부분
Model로 부터의 처리 결과를 View에 통지하고, View의 요청에 따라 로직을 실행
ViewModel 의 특징은 Data Binding 과 캡슐화된 Command 패턴을 이용하여 View 와 Model 간 결합도를 없애면서 View와 Model 사이에서 중간 관리자의 역할을 완벽하게 수행한다.
Data binding : 객체 간 의존성을 부여하여 View 객체와 Model 객체를 연결하는 기능을 지원한다.
Command 패턴 : 여러 객체에서 발생하는 일들을 Command 캡슐화를 통해 일괄적으로 처리하는 패턴
😊장점
😥단점
가장 큰 차이점은 Controlle의 역할을 나눈 것.
MVC 패턴은 Controller가 View와 Model을 조율하며, MVVM 패턴은 ViewModel이 View와 Model을 연결한다. MVVM 패턴은 데이터 바인딩과 의존성 주입 등의 기능을 사용하여 유연하고 테스트 가능한 코드를 작성할 수 있다.
참고
https://developer.mozilla.org/ko/docs/Glossary/MVC
https://junhyunny.github.io/information/design-pattern/mvc-pattern/
https://scshim.tistory.com/407
https://doqtqu.tistory.com/332
MVC 보다는 MBC가 좋아용 호호