ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MVVM과 MVI 디자인 패턴 차이점 알아보기
    Android 2023. 3. 23. 11:51

    안녕하세요, 매시업 13기 안드로이드 기수로 활동 중인 지성빈입니다.

     

    요즘 Jetpack Compose라는 선언형 UI 툴킷이 인기를 얻고 있고, Jetpack Compose는 Unidirectional Data Flow로 상태 관리가 권장되기에 이를 사용하는 디자인 패턴인 MVI를 공부하신 분을 주변에서 흔히 볼 수 있습니다.

     

    이번 글에선 기존에 안드로이드에서 흔히 쓰이던 MVVM과 최근들어 뜨고 있는 MVI 디자인 패턴의 차이점을 알아보겠습니다.

     

    Unidirectional Data Flow

    UDA는 데이터가 애플리케이션의 한 방향으로만 흐르는 소프트웨어 아키텍처 패턴입니다. 데이터가 한 방향으로만 흐르기에 one-way binding라고도 합니다.

     

    UDA에서 데이터는 일반적으로 "저장소 (store)" 또는 "상태 (state)"라고 하는 단일 데이터 소스(single source of truth)에서 흐르며, 컴포넌트 계층 구조를 통해 아래로 전파됩니다.

     

    컴포넌트는 매개변수를 통해 데이터를 수신하고, 상태를 수정하는 이벤트나 작업을 트리거할 수 있습니다. 하지만 컴포넌트가 직접 상태를 수정할 수는 없으며, 모든 수정은 중앙 집중식(centralized) 메커니즘(→ “store” or “state”)을 거쳐야 합니다.

     

    UDF의 장점은 예측 가능성과 테스트 가능성이 향상되고 디버깅과 유지 관리가 쉬워진다는 점입니다. 모든 데이터 수정이 centralized store를 거치므로 버그를 추적하고 일관된 애플리케이션 상태를 유지하기가 더 쉬워집니다.

     

    UDF를 달성하기 위해선 다음과 같은 조건이 필요합니다.

    • 상태가 불변으로 관리돼야 합니다.
    • 상태를 변경하는 API가 “store” 혹은 “state”에 은닉돼야 합니다.
    • 상태의 변경이 한 곳에서만 진행돼야 합니다.

     

    위 조건을 모두 지키지 않으면 상태를 어떠한 곳에서든 변경할 수 있으므로 UDF에 적합하지 않고, 만약 이를 모두 지킨다면 UDF라고 볼 수 있습니다.

     

     

    UDA vs MVVM

    MVVM은 UI와 Model 사이의 상호 작용을 처리하는 로직을 분리하는 디자인 패턴입니다. MVVM은 컴포넌트 간의 특정 데이터 흐름이나 통신 패턴을 제한하지 않습니다.

     

    반면에 UDA는 애플리케이션을 통한 단방향 데이터 흐름을 강조하는 소프트웨어 아키텍처 패턴으로, 애플리케이션 데이터의 단일 소스 역할(single source of truth)을 하는 중앙 집중식 상태 또는 저장소(centralized state or centralized store) 사용을 강조합니다. 데이터는 컴포넌트 계층 구조를 통해 아래로 흐르며, 컴포넌트는 상태를 수정하는 작업을 트리거할 수 있지만 상태 자체를 수정할 수는 없습니다.

     

    MVVM과 UDA의 주요 차이점은 데이터 흐름과 상태 관리에 대한 접근 방식에 있습니다. MVVM은 관심사를 분리하고 뷰와 모델 간의 상호 작용을 처리하기 위한 명확한 구조를 제공하는 데 중점을 둡니다. 반면에 UDA는 중앙 집중식 상태 관리 메커니즘(centralized mechanism for managing state)을 통해 애플리케이션을 통한 데이터의 명확하고 예측 가능한 흐름을 보장하는 데 중점을 둡니다.

     

     

     

     

    끝!

    추가로 궁금하신 점이 있다면 댓글 달아주세요. 끝까지 읽어주셔서 감사합니다.

Designed by Tistory.