ABOUT ME

-

  • Android) Airbnb에서 만든 MvRx 알아보기
    Android 2021. 2. 15. 15:48


    이전 글에 작성했던 Epoxy를 통해 구글 알고리즘이 MvRx란 것에 저를 도달하게 하여.. 포스팅해보려고 합니다. 

    아직 버그 및 이슈들로 불안정한 코드들이긴 하나 Airbnb의 지속적인 지원으로 언젠가 Stable 해지지 않을까 싶습니다.

    MvRx에 관한 자세한 내용은 공식 문서 참고 바랍니다.

     

    MvRx

    MvRx (mavericks로 발음)는 Airbnb의 거의 모든 제품 개발에 사용하는 Airbnb의 Android 프레임 워크입니다.

     

    MvRx는 다음과 같은 기존 기술과 개념을 기반으로 구축되었습니다.

    • Kotlin
    • Android Architecture Components
    • RxJava
    • React (conceptually)
    • Epoxy (optional)

    Core Concepts

    State

    • MvRxState는 화면을 렌더링하는 데 필요한 속성을 포함하는 변경 불가능한 Kotlin 데이터 클래스입니다.
    • Immutability - 강제로 불변적이기 때문에 매번 데이터 변경 시 data class coply() 함수를 사용하여 state를 복제 후, reduce 해줘야 합니다.
    • State Creation - MvRx는 ViewModel의 초기 상태를 자동으로 생성합니다.

    ViewModel

    • MvRxViewModel은 구글의 AAC ViewModel의 라이프 사이클을 따르고 있습니다.
    • 이 둘의 주요 차이점은 MvRxViewModel은 불변성의 단일 MvRxState를 가지며, AAC ViewModel에서 가지는 데이터 홀더 클래스인 LiveData 대신 뷰에서는 오직 State를 관찰합니다.
    • MvRxViewModel는 비즈니스 로직과 뷰를 렌더링 하는 것 이외의 모든 것을 처리합니다. ViewModel의 상태와 상태를 관찰할 수 있습니다.
    • InitialState모든 MvRxViewModel은 initialState로 생성되어야합니다. 대부분의 경우 모든 속성에 기본값을 제공할 수 있습니다.
    • State factory - InitialState를 만드는 또 다른 방법은 ViewModelFactory에서 initialState를 재정의하는 것입니다.
    • Accessing State - State는 withState 블록으로 액세스 할 수 있습니다.
    • Update State - ViewModel은 상태를 수정할 수 있는 유일한 객체입니다. setState를 호출하여 현재 상태를 블록의 수신자 유형으로 호출하고 새 상태를 반환합니다.

     

    View

    • MvRxView는 ViewModels 상태가 변경 될 때마다 호출되는 invalidate() 함수가 있는 LifecycleOwner입니다.
    • Accessing State - State는 withState 블록으로 액세스 할 수 있습니다.
    • ViewModel ScopeViewModel은 Fragment 또는 Activity로 범위를 지정할 수 있습니다.

    - Creating and Subscribing to a ViewModel -

       MvRx는 ViewModel 생성 및 액세스를위한 3개의 Kotlin delegates와 함께 제공됩니다.

    • fragmentViewModel - 이 Fragment로 범위가 지정된 기존 ViewModel을 새로 만들거나 가져옵니다.
    • activityViewModel - 이 Activity로 범위가 지정된 기존 ViewModel을 새로 만들거나 가져옵니다. 이는 여러 화면에서 데이터를 공유하는 데 유용합니다.
    • existingViewModel - 현재 Activity Scope에서 기존 ViewModel을 가져옵니다. 이는 자체 ViewModel을 생성할 필요가 없고 이전 화면에서 생성된 모델에 의존해서는 안 되는 흐름 중간에 있는 뷰에 유용합니다.

     

    Async

    • AsyncUninitialized, Loading, Success, Fail의 4 가지 유형으로 구성된 Kotlin Sealed 클래스입니다.
    • MvRx에는 Observable <T>를 상태의 Async <T> 속성에 매핑하는 쉬운 확장 기능이 포함되어있어 한 줄의 코드로 네트워크 요청 및 기타 작업을 쉽게 실행할 수 있습니다.

    Sealed class로 구성된 하위 4개의 subClass

    • Uninitialized - 초기화 되지 않은 상태. data hold 하지 않음.
    • Loading - value를 부여할 수 있음. completed 된 값은 아님.
    • Success - 성공적으로 값을 부여 받음.
    • Fail - 값과 함께 error(Exception)를 넘겨받을 수 있음.

    References

    Airbnb - MvRx 아키텍처 소개

    mavericks

    반응형

    댓글

Designed by Me.