MVI란?

disun.sj·2023년 5월 21일

MVVM의 문제점

상태 문제

  • 상태 제어가 제대로 이뤄지지 않는상태

부수 효과(side effect)

  • 원래의 목적과 다른 효과 또는 부작용이 발생하는 상태

특징

  • 다른 패턴과 유사하지만 의도(Intent)와 상태(State)라는 두 가지 새로운 개념이 도입
  • 단방향(Unidirectional) 및 순환(Circular Data Flow)의 원칙을 기반으로 작동
  • MVC, MVP, MVVM과 다르게 I가 실제 컴포넌트를 지칭하지 않는다
  • MVVM, MVP 기반으로 작성된 코드를 많다

구조

Model

  • 상태(State)를 의미
  • intent로 전달받은 객체에 맞추어 새로운 불변객체를 Model로 생성
  • 단방향 데이터 흐름을 보장하기 위해 변경이 불가능

View

  • Model의 결과물인 상태를 구독하고 있다가 변경 시 UI 업데이트를 진행

Intent

  • 앱의 상태를 바꾸려는 의도를 의미
  • Model에게 앱의 상태를 전달
  • Android의 Intent와는 다른 개념이다

흐름

  • 사용자-Intent-(SideEffect)-Model-View-사용자

장점

  • 상태 관리가 쉽다
  • 데이터가 단방향으로 흐른다
  • 스레드 안정성을 보장
  • 디버깅 및 테스트가 쉽다
  • 서로간 의존성이 없다

단점

  • 러닝커브가 가파르다
  • 보일러플레이트 코드가 양산
  • 작은 변경도 Intent로 처리
  • Intent, State, Side Effect 등 모든 상태에 대한 객체를 생성해야 하므로 파일 및 메모리 관리에 유의
  • RxJava, Orbit-MVI와 같은 Observable한 라이브러리를 이용(필수는 아님)

참고

https://meetup.nhncloud.com/posts/342
https://brunch.co.kr/@oemilk/113
https://yoon-dailylife.tistory.com/117
https://jaehochoe.medium.com/%EB%B2%88%EC%97%AD-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%EB%A5%BC-%EC%9C%84%ED%95%9C-mvi-model-view-intent-%EC%95%84%ED%82%A4%ED%85%8D%EC%B3%90-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-165bda9dfbe7
https://www.charlezz.com/?p=46365
https://sungbin.land/%EC%95%84%EC%A7%81%EB%8F%84-mvvm-%EC%9D%B4%EC%A0%A0-mvi-%EC%8B%9C%EB%8C%80-319990c7d60
https://velog.io/@jshme/MVI-Architecture-for-Android
https://heegs.tistory.com/112

0개의 댓글