MVx
의 x
는 다양한 패턴을 의미대표적인 MVx 변형들:
각 패턴은 특정 요구 사항에 맞춰 적절히 선택하는 것이 중요함
패턴 | 구성 요소 | 역할 |
---|---|---|
MVP | Model | 데이터와 비즈니스 로직을 관리. View나 Presenter에 데이터를 제공. |
View | UI와 사용자 입력 처리. 로직은 포함하지 않으며, Presenter에 이벤트 전달. | |
Presenter | View와 Model 간의 중간 관리자. 로직을 처리하고 View에 업데이트를 명령. | |
MVVM | Model | 데이터와 비즈니스 로직 관리. |
View | 사용자와 상호작용. ViewModel과 양방향 데이터 바인딩을 통해 UI를 업데이트. | |
ViewModel | View와 Model 사이에서 상태 관리. 데이터를 변환해 View에 제공. | |
MVI | Model | 애플리케이션 상태를 관리하는 단일 진리 소스(Single Source of Truth). |
View | Model의 상태를 구독하여 UI를 렌더링. Intent를 Model로 전달. | |
Intent | 사용자의 이벤트를 Model로 전달하여 상태 변경을 트리거. |
패턴 | 데이터 흐름 방식 | 특징 |
---|---|---|
MVP | 양방향 흐름 | Presenter는 Model과 View 간의 데이터를 주고받으며 중간 관리자 역할. |
MVVM | 양방향 데이터 바인딩 | ViewModel은 Model과 View를 연결하며, 데이터 바인딩을 통해 상태를 자동으로 동기화. |
MVI | 단방향 데이터 흐름 (Unidirectional) | Intent → Model → State → View 순으로 한 방향으로만 상태 업데이트. 이벤트 기반. |
항목 | MVP | MVVM | MVI |
---|---|---|---|
View의 역할 | View는 UI를 보여주고, Presenter와 직접 상호작용. | View는 ViewModel과 데이터 바인딩. | View는 상태를 구독하고, Intent를 Model로 전달. |
중간 관리자 | Presenter가 중간 관리자 역할. | ViewModel이 상태 관리 및 데이터 변환 담당. | Intent와 Model이 상태 업데이트를 담당. |
데이터 바인딩 | 없음. 로직은 Presenter에서 수동으로 처리. | 자동 데이터 바인딩(View ↔ ViewModel). | 데이터 바인딩 대신 단방향 흐름을 강제. |
테스트 용이성 | View가 Presenter에 의존적이라 테스트가 복잡. | View와 ViewModel이 분리되어 테스트 용이. | 단방향 흐름으로 테스트가 체계적. |
복잡도 | 단순한 구조, 적은 학습 곡선. | 중간 정도. 데이터 바인딩 도구 필요. | 복잡한 단방향 흐름 관리 필요. |
패턴 | 장점 | 단점 |
---|---|---|
MVP | - 간단한 구조로 이해와 구현이 쉬움. | - View와 Presenter 간 강한 의존성으로 인해 테스트가 어려울 수 있음. |
- 소규모 프로젝트에 적합. | - 로직이 복잡해질수록 Presenter가 비대해질 가능성. | |
MVVM | - View와 로직이 분리되어 테스트와 유지보수가 용이. | - 데이터 바인딩이 필수적이며, 구현 복잡도 증가. |
- ViewModel로 상태 관리가 효율적. | - 대규모 프로젝트에서 과도한 데이터 바인딩은 디버깅을 어렵게 만듦. | |
MVI | - 단방향 데이터 흐름으로 로직이 명확하고 디버깅이 쉬움. | - 단방향 상태 관리 구현이 비교적 복잡. |
- 상태 관리가 철저히 구조화되어 안정적인 앱 개발 가능. | - 불변 객체와 단방향 흐름으로 오버헤드 증가 가능. |
필요와 상황에 맞춰 선택하면 됨