투케이2K

8. (TWOK/STUDY) [투케이 학습] : MVI (Model-View-Intent) 형태 로직 구현 - Android 본문

투케이2K 학습정리

8. (TWOK/STUDY) [투케이 학습] : MVI (Model-View-Intent) 형태 로직 구현 - Android

투케이2K 2023. 8. 14. 23:35
반응형

[제 목]

[투케이 학습] : MVI (Model-View-Intent) 형태 로직 구현 - Android

 

[설 명]

  • MVI 설명 :
    • MVI 는 자바스크립트 Cycle.js 의 [단방향성] 과 Cycle Nature 에서 영감을 받아 만들어진 안드로이드 아키텍처 패턴입니다
    • MVI 는 패턴 흐름 : User >> Intent >> Model >> View 로 이루어진 단방향성 (Intent 와 Model 사이에 SideEffects 가 추가 존재 가능)

  • MVI 패턴 각 컴포넌트 요약 설명 :
    • Model (모델) :
      • 앱의 상태와 데이터를 가지고 있는 불변 객체
    • View (뷰) :
      • 사용자가 볼 수 있는 화면 (Activity / Fragment)
    • Intent (인텐트) :
      • 앱의 상태를 변경하는 요청

  • MVI 각 컴포넌트의 세부 설명 :
    • Model (모델) :
      • 앱의 상태를 나타냅니다
      • 변수 값이나 UI의 버튼 클릭과 같은 변경 사항에 반응되어 새로운 상태로 전환 됩니다
      • View 가 화면에 렌더링 해야 하는 것들을 응답 (반환) 해줍니다 [ex : 서버로부터 받은 데이터, 프로그레스 진행률]
      • 모델은 단방향 흐름을 위해 변경 불가 해야합니다
    • View (뷰) :
      • Activity , Fragment 처럼 사용자에게 보여지는 화면입니다
      • 모델의 변경된 상태를 사용자에게 다시 렌더링해서 보여줍니다
    • Intent (인텐트) :
      • 사용자 또는 앱 내에서 발생하는 이벤트 동작을 나타냅니다
      • 앱의 상태를 변경하는 요청을 전달합니다
      • 모델은 인텐트를 통해서, 새로운 상태로 변화할 수 있습니다 (핸들러 포함 시 핸들러가 모델 데이터 업데이트 치고 >> 인텐트로 알림 전달 >> 인텐트는 알림 전달 받으면 뷰에 화면 갱신 요청)
    • Side Effect (핸들러) :
      • Intent 와 Model 사이에서 사이드 이펙트를 처리하는 숨겨진 컴포넌트입니다
      • 사용자가 Intent 발송 >> Model 입력 값으로 전달 할 수 있습니다
      • Background 작업, API 통신, I/O 작업 등 비즈니스 로직이 포함 될 수 있습니다

  • MVI 장점 및 단점 :
    • [장점] : 앱의 상태가 하나 뿐이라, 상호작용이 많아져도 상태 충돌이 없습니다
    • [장점] : 데이터의 흐름이 정해져 있어 흐름을 이해하고 관리하기가 쉽습니다
    • [장점] : 각각 값이 불변하기 때문에, 스레드에 있어 안정성을 가집니다
    • [단점] : 다른 MV 형재들에 비해 러닝커브가 높습니다
    • [단점] : 작은 변경도 모두 intent를 통해야 하고, 아주 작은 앱도 최소한의 intent와 model를 가져야 합니다
    • [단점] : model 을 업데이트 하기 위해 매번 새로운 인스턴스를 만들어야 합니다
 

[구현 정리]

    /**
     * // --------------------------------------------------------------------------------------
     * TODO [로직 흐름]
     * // --------------------------------------------------------------------------------------
     * [1] : Activity : 사용자가 버튼 클릭 동작 실시
     * [2] : Activity : 버튼 클릭 이벤트 발생 시 >> Intent 이벤트 호출 실시
     * [3] : Intent : Intent 에서는 세부 로직 처리 및 Model 데이터 업데이트를 위한 Handler 호출
     * [4] : Handler : Handler 에서는 세부 로직 처리 및 Model 데이터 업데이트
     * [5] : Handler : Handler Model 업데이트 이후 >> Intent 로 데이터 변경 상태 알림 전달
     * [6] : Intent : Handler 로부터 알림을 전달 받으면 >> Activity 렌더링 화면 호출 실시
     * [7] : Activity : 렌더링 명령이 내려오면 화면 UI 갱신 실시
     * // --------------------------------------------------------------------------------------
     * TODO [클래스 구조]
     * Activity : 뷰 화면, 모델 상태 업데이트 시 렌더링을 수행해 다시 변경된 데이터 사용자에게 표시
     * Intent : 이벤트 동작 정의, 앱 상태 변경 요청 전달
     * Handler : 인텐트와 모델 중간 사이 위치해 비즈니스 로직 처리 및 모델 상태 업데이트, 인텐트로 모델 상태 알림 전
     * Model : 모델 데이터 상태 값 저장
     * // --------------------------------------------------------------------------------------
     */
 

 

반응형
Comments