-
[Android] - MVI?카테고리 없음 2024. 5. 2. 21:01
안드로이드에서는 MVC, MVP, MVVM과 같은 여러 가지 디자인 패턴을 사용할 수 있다.
MVC, MVP, MVVM 같은 패턴들은 관심사의 분리를 통해 테스트 코드의 작성을 용이하게 해주는 등, 대규모 개발에 있어서 필수 요소가 되었다.
그래서 현재 본인도 위의 MVVM 패턴을 프로젝트에서도 사용 중이다.
하지만
최근 MVI라는 내가 잘 모르는 패턴에 알게 되어서 이렇게 공부하고 포스팅을 해본다.MVI?
M - Model
Model은 앱의 상태를 나타내는 data class이다. MVI에서는 Model이 불변성을 유지, 단순하고 불변한 데이터 구조로 유지가 된다. Model은 Intent를 처리하여 새로운 상태를 만들어내고 변경된 상태를 구독하는 View에 전달을 하게 된다. 즉, 각 Intent에 대한 새로운 상태를 생성하는 것은 Model의 책임이다. 이러한 방식으로 MVI는 예측 가능하고 일관된 상태 변화를 가질 수 있다. Model은 비즈니스 로직을 포함하지 않으며, 순수한 data class로 유지된다.
V - View
View는 사용자 인터페이스를 나타나고, Model의 상태를 구독하여 UI를 업데이트를 해준다. MVI에서 View는 단순 뷰 클래스로 유지되며, UI 이벤트 및 사용자 입력을 처리하여 Intent를 생성한다. 생성된 Intent는 viewModel에 전달이 되어 앱의 상태를 변경하고, 변경된 상태는 다시 View에게 전달이 되어 UI를 업데이트하게 된다. 이렇게 MVI는 단방향 데이터 흐름을 유지하고, 예측 가능한 상태 변화를 가질 수 있다. View는 비즈니스 로직을 포함하지 않는다. 간단하게 Activity, Fragment 즉, 하나 이상의 View라고 말할 수도 있다.
I - Intent
Intent는 사용자 또는 시스템에서 발생하는 UI 이벤트 또는 사용자 입력을 나타낸다. 예시로는 버튼 클릭, 텍스트 입력 등등이 Intent가 될 수 있는 것이다. MVI에서는 Intent를 처리하여 앱의 상태를 변경하고, 변경된 상태를 기반으로 UI를 업데이트하게 된다. Intent는 불변성을 유지하며, 이전 상태와 새로운 상태를 결합하여 새로운 상태를 생성한다. 이러한 방식으로 MVI는 단방향 데이터 흐름을 유지하고, 예측 가능한 상태 변화를 가질 수 있는 것이다.
MVI에서 I를 왜 Intent로 불릴까?
안드로이드에서는 Intent가 앱에서 UI 이벤트 및 사용자 입력을 나타내는 일반적인 용어이다.
안드로이드에서 Intent는 앱 구성 요소 간의 통신을 위한 메시지 객체를 의미하기도 하지만, MVI에서의 Intent는 단순히 사용자가 View에서 발생시키는 UI 이벤트나 입력을 나타낸다. Action과 Intent는 비슷한 의미를 가지고 있지만 MVI에서는 Intent를 사용하는 것이 일반적이다. 불변성을 유지하고, 단방향 데이터 흐름을 유지하는데 더욱 적합하기 때문이다.
”MVI” stands for Model-View-Intent, and is an architectural pattern used in Android development. This pattern introduces a unidirectional data flow which makes it easier to understand an app’s state at any given point in time. In the MVI pattern, the Intent represents an intention or desire to perform an action, often triggered by user inputs. The View is responsible for rendering the UI and emitting intents. The Model, on the other hand, represents the state of the app and reacts to intents by changing its state. It’s the Model’s responsibility to respond to each Intent with a resulting new state. Once a new state is created, it is published back to the View. This clear separation and single direction of data and event flow can help in managing side-effects and handling asynchronous actions.
"MVI"는 Model-View-Intent의 약자로, 안드로이드 개발에서 사용되는 아키텍처 패턴입니다. 이 패턴은 앱의 상태를 언제든지 이해하기 쉽게 만드는 단방향 데이터 흐름을 소개합니다. MVI 패턴에서 Intent는 사용자 입력에 의해 자주 발생하는 동작이나 의도를 나타냅니다. View는 UI를 렌더링 하고 Intents를 발생시킵니다. 반면에 Model은 앱의 상태를 나타내며, Intents에 반응하여 상태를 변경합니다. 각 Intent에 대한 새로운 상태를 생성하는 것은 Model의 책임입니다. 새로운 상태가 생성되면 이를 다시 View로 게시합니다. 이러한 명확한 분리와 단일 방향의 데이터 및 이벤트 흐름은 부수 효과를 관리하고 비동기적 작업을 처리하는 데 도움이 될 수 있습니다.https://www.kodeco.com/817602-mvi-architecture-for-android-tutorial-getting-started#toc-anchor-001