attached to post
# Orbit MVI - (1) Compose를 도입하면서 상태 관리의 중요성이 증가하였으며, 앱의 규모가 커지면서 상태 변화에 따른 뷰의 업데이트와 비즈니스 로직 처리가 동시에 일어나면서 코드의 복잡성이 증가하였습니다. 이러한 문제점을 해결하는 데 특화된 아키텍쳐 패턴중에 MVI(Model - View - Intent)라는 패턴이 있습니다. “Model”은 UI에 반영되는 state를 의미하며, “View”는 사용자에게 보이는 컴포넌트를 의미합니다. 마지막으로 “Intent”는 안드로이드에서 사용되는 Intent가 아닌 사용자 액션 또는 시스템 이벤트에 따른 결과 즉 의도라고 생각하면 됩니다. MVI는 단방향 흐름 구조입니다. 사용자 액션이 발생하게 되면 새로운 Intent로 변경이 되며, 해당 Intent를 통해 새로운 Model을 만들어 View를 갱신하는 구조입니다. 여기서 Model은 값을 변경하는 것이 아닌 새로운 Model 객체를 생성하는 것이므로, Model에 대한 예측이 가능하여 디버깅을 수월하게 할 수 있습니다. 여기서 추가로 SideEffect 즉 부수 효과에 대한 개념이 나오는데, 순수함수 구조로 순환되어 상태를 업데이트하지 않는 경우도 발생하게 됩니다. 이를 SideEffect를 통해서 해결합니다. MVI 패턴은 멀티스레드 환경에서 안정적인 동작을 제공하며, 위에서 언급한 듯이 일관성 있는 상태를 가져 디버깅하기 수월하다는 장점이 있습니다. 하지만 상태 관리를 위한 파일 및 메모리 사용이 증가할 가능성이 있습니다. ## Orbit-MVI MVI 보일러 플레이트를 줄일 수 있는 방법 중에 Orbit-MVI 라이브러리를 사용하는 방법이 있습니다. 해당 영상을 보면 직접 MVI 컨테이너를 구현하지 말고 라이브러리를 사용하라고 권고합니다. 그 이유는 스레딩 모델을 효율적으로 사용하기 어려우며, ViewModel을 테스트하기 쉽지 않기 때문입니다. Orbit-MVI 라이브러리에서는 멀티 플랫폼 지원 및 해당 문제점들을 해결할 수 있게 구현했습니다. 다음에는 Orbit-MVI 대해서 분석해보겠습니다. ## 참고 - https://www.charlezz.com/?p=46365 - https://github.com/orbit-mvi/orbit-mvi
콘텐츠를 더 읽고 싶다면?
원티드에 가입해 주세요.
로그인 후 모든 글을 볼 수 있습니다.
댓글 3