MVC 패턴은 애플리케이션을 모델(Model), 뷰(View), 컨트롤러(Controller)의 세 가지 역할로 나누어 구성하는 디자인 패턴입니다.
모델은 애플리케이션의 핵심 데이터와 그 데이터를 처리하는 로직을 담당합니다. 데이터베이스, 상수, 변수 등이 이에 해당하며, 컨트롤러를 통해 데이터를 생성, 수정, 삭제합니다. 뷰나 컨트롤러에 의존하지 않고 독립적으로 존재합니다.
뷰는 사용자 인터페이스(UI)를 구성합니다. 예를 들어 입력 박스, 체크박스, 버튼과 같이 사용자가 직접 눈으로 보거나 상호작용하는 요소들이 뷰에 해당합니다. 뷰는 데이터를 직접 처리하지 않고, 데이터를 모델로부터 전달받아 화면에 표시하는 역할을 합니다.
컨트롤러는 뷰와 모델 사이를 중재하는 역할을 합니다. 사용자의 입력 이벤트(클릭, 입력 등)를 처리하고, 적절한 모델을 갱신하거나 뷰를 업데이트합니다. 메인 로직을 처리하는 중심 축이라고 볼 수 있습니다.
MVP 패턴은 MVC 패턴에서 컨트롤러가 **프레젠터(Presenter)**로 대체된 구조입니다. 가장 큰 특징은 **뷰(View)**와 **프레젠터(Presenter)**가 1:1 관계를 가진다는 점입니다.
Presenter는 사용자 인터페이스 로직을 처리하며, 뷰와 모델 간의 완전한 분리를 가능하게 합니다. 뷰는 가능한 한 단순하게 유지되며, 모든 로직은 프레젠터가 담당합니다. 뷰는 프레젠터에 대한 인터페이스만 알고 있어 테스트가 용이합니다.
MVVM 패턴은 MVC 패턴에서 컨트롤러가 뷰모델(ViewModel)로 대체된 구조입니다. 뷰(View)와 뷰모델(ViewModel) 간에는 양방향 데이터 바인딩이 존재합니다. 이 구조는 특히 UI와 데이터 상태가 밀접하게 연동되는 애플리케이션에 적합합니다.
ViewModel은 뷰의 상태와 동작을 관리하며, 뷰와 모델 간의 중간 매개체 역할을 합니다. 뷰모델은 커맨드(Command)와 바인딩(Binding) 개념을 통해 뷰와 동기화됩니다.
| 패턴 | 핵심 구조 | 특징 | 대표 프레임워크 |
|---|---|---|---|
| MVC | Model - View - Controller | 역할 분리, 대규모에 적합 | Spring, Django |
| MVP | Model - View - Presenter | 테스트 용이, 강한 1:1 관계 | Android MVP |
| MVVM | Model - View - ViewModel | 양방향 바인딩, UI 중심 앱에 적합 | Vue, WPF, Jetpack Compose |
각 패턴은 목적과 사용하는 플랫폼에 따라 다르게 적용됩니다. 프로젝트의 규모, 테스트 요구사항, UI 복잡성 등을 고려하여 적절한 아키텍처 패턴을 선택하는 것이 중요합니다.