MVI 패턴
자바스크립트 생태계에서 탄생했으며
MVC에서 파생된 능동적인 Controller 대신
Intent라고 불리는 Reactive 요소를 이용한 아키텍처 패턴
MVC에서 Controller가 직접 Model을 업데이트하고 View를 선택하는 능동적인 구조가 아닌
MVI는 Intent가 User를 관찰하고 Model이 Intent를 관찰하고 View가 Model을 관찰하고 User가 View를
관찰하는 Reactive 요소로 이루어져 있습니다
따라서 안드로이드에서는 RxJava 같은 라이브러리가 필수적입니다
동작
- Intent로 User로부터 입력을 가져옵니다
(Android의 Intent와 서로 다른 개념입니다
- Intent는 Model에서 처리해야 하는 동작Intended action)을 제공합니다
- Model은 Intent로부터 동작을 가져옵니다
(MVI의 Model은 단순 데이터뿐만 아니라 Application 상태State와 Business Logic을 관리합니다
- Model은 View에 표시할 새로운 모델을 생성합니다
(Immutability 한 모델을 생성합니다
- View는 Model로부터 새로운 모델을 가져와 표시합니다
Android에서 발생할 수 있는 여러 이슈들화면 회전 BackStack, Process death 등로 인해 코드들이 복잡해지기 쉬운데 MVI는 단방향Uni-directional 데이터 흐름과 불변성Immutability으로 인해 예측 가능한 상태가 만들어지기 때문에 유지보수가 좀 더 용이해지는 장점이 있다.
장점
- 단방향 불변성 데이터를 이용해 예측 가능한 상태
- 서로 간 의존성 없음
단점
- RxJava와 같은 Observable 한 외부 라이브러리를 이용해야 함