MVI에 대한 글을 작성하기에 앞서 여러 Architecture Pattern들에 대해 간단하게 정리.
1️⃣ MVC ( Model - View - Controller )
웹 애플리케이션에서 가장 많이 쓰이는 아키텍처 패턴 중의 하나이다.
✅ Model: 애플리케이션에서 사용되는 데이터와 데이터를 처리하는 부분이며, 비즈니스 로직을 나타낸다.
✅ View: UI 컴포넌트로 사용자에게 보여지는 부분이다.
✅ Controller: 사용자의 Action을 입력받고 처리한다. 모델과 뷰 사이에서 협력자 역할을 한다.
[장점]
- 여러 개의 뷰를 모델에 빌드할 수 있다.
- 변경사항이 모델 전체에 영향을 주지 않는다.
- 데이터를 어떠한 형태의 가공 없이 반환한다.
[단점]
- View와 Model 사이의 의존성이 높아질 수 있다.
2️⃣ MVP ( Model - View - Presenter )
View와 Model의 높은 의존성을 가진 MVC의 단점을 해결하기 위한 패턴이다. Controller가 사라지고 Presenter가 포함된다.
✅ Model, View
MVC 패턴과 동일하다.
✅ Presenter
사용자로부터 모든 UI 이벤트를 수집하고 이를 Model로 보내며 결과를 View로 보낸다.
MVC의 Controller의 역할과 View의 Interface를 포함한다고 보면된다.
[장점]
- View와 Model 사이에 의존성이 낮다.
- 코드 재사용성이 높아진다. View를 컨트롤 하기 위해 여러 개의 Presenter를 가질 수 있다.
[단점]
- View와 Presenter 사이의 의존성이 높아지는 경향이 있다.
3️⃣ MVVM ( Model - View - ViewModel )
✅ ViewModel
View를 나타내주기 위한 Model이자 그 데이터를 처리하는 부분이다.
View의 상태를 유지시키고 View의 이벤트를 활성화시킨다.
[로직]
- View에 Action을 수집하고 ViewModel로 전달한다.
- ViewModel은 Model에 데이터를 요청한다.
- Model은 해당 요청에 따른 응답을 ViewModel에 보낸다.
- ViewModel은 해당 응답을 가공하여 저장한다.
- View는 ViewModel을 관찰하고 있다가 변화가 감지되면 View를 업데이트 시킨다.
[장점]
- View와 Model 사이에 의존성이 없다.
- 각 부분이 독립적으로 구현되기 때문에 모듈화하여 개발할 수 있다.
'Android' 카테고리의 다른 글
| [Android] Custom Calendar (0) | 2022.08.23 |
|---|---|
| MVI( Model - View - Intent ) (0) | 2022.08.16 |
| [Jetpack Compose] State (0) | 2022.04.22 |
| Jetpack Compose로 마이그레이션하기 (1) (0) | 2022.04.20 |
| [Android] Fragment간 데이터 공유(Navigation, SafeArgs) (0) | 2021.05.07 |


