MVx 프레임워크

정은경·3일 전
0

👸 Front-End Queen

목록 보기
279/281

1. MVx 프레임워크란?

  • MVx는 소프트웨어 아키텍처 패턴의 한 종류
  • 사용자 인터페이스(UI)를 애플리케이션의 데이터와 로직에서 분리하기 위해 사용됨
  • MVxx는 다양한 패턴을 의미

대표적인 MVx 변형들:

1-1. MVC (Model-View-Controller)

  • 가장 기본적인 MVx 패턴.
  • 구성 요소:
    • Model: 애플리케이션의 데이터와 비즈니스 로직을 담당.
    • View: 사용자에게 보이는 UI 요소.
    • Controller: 사용자 입력을 처리하고, Model과 View를 연결하는 중간 관리자.
  • 흐름:
    1. 사용자가 View를 통해 입력.
    2. Controller가 입력을 처리하고 Model을 업데이트.
    3. Model의 변경 사항이 View에 반영됨.
  • 예시: Ruby on Rails, ASP.NET MVC

1-2. MVP (Model-View-Presenter)

  • MVC의 변형으로 Controller 대신 Presenter를 사용.
  • 구성 요소:
    • Model: 데이터와 비즈니스 로직.
    • View: UI를 표현하며, 사용자와의 상호작용은 Presenter에게 전달.
    • Presenter: View의 이벤트를 처리하고 Model과 상호작용하며, 결과를 View에 전달.
  • 특징:
    • View는 최대한 단순화하고, 비즈니스 로직은 Presenter에 집중.
  • 예시: Android에서 Activity/Fragment와 Presenter를 사용하는 MVP 구조.

1-3. MVVM (Model-View-ViewModel)

  • 주로 데이터 바인딩이 가능한 프레임워크에서 사용.
  • 구성 요소:
    • Model: 데이터와 비즈니스 로직.
    • View: 사용자에게 보이는 UI.
    • ViewModel: Model과 View 사이에서 데이터와 상태를 관리. View와 양방향 데이터 바인딩을 통해 상태를 자동으로 동기화.
  • 특징:
    • View는 상태를 직접 업데이트하지 않고, ViewModel이 상태를 관리.
    • 데이터 바인딩을 통해 코드를 줄이고 유지보수를 용이하게 함.
  • 예시: Angular, React (Hooks와 상태 관리 라이브러리), WPF (Windows Presentation Foundation)

1-4. MVI (Model-View-Intent)

  • 이벤트 기반의 아키텍처 패턴.
  • 구성 요소:
    • Model: 앱의 상태와 비즈니스 로직.
    • View: 상태를 기반으로 UI를 렌더링.
    • Intent: 사용자의 입력 이벤트를 정의하고, Model에서 상태를 변경.
  • 특징:
    • 단방향 데이터 흐름(Unidirectional Data Flow).
    • 상태(state)와 이벤트(event)에 집중.
  • 예시: React(Flux 또는 Redux), Jetpack Compose(MVI 패턴).

MVx 패턴의 장점

  1. UI와 로직의 분리: 유지보수성과 테스트가 쉬워짐.
  2. 재사용성: UI, 로직, 상태를 독립적으로 관리 가능.
  3. 협업 용이: 개발자와 디자이너가 각각의 컴포넌트를 분리해 작업 가능.

MVx 프레임워크를 사용하는 이유

  • 복잡한 애플리케이션의 구조를 체계적으로 설계.
  • 코드의 모듈화와 재사용성 향상.
  • 유지보수와 확장성을 높여 개발 생산성 강화.

사용 사례

  • MVC: 간단한 웹 애플리케이션.
  • MVP: 뷰가 더 많은 로직을 다뤄야 하는 모바일 애플리케이션.
  • MVVM: 데이터 바인딩이 필요한 대규모 프로젝트.
  • MVI: 단방향 상태 관리가 중요한 실시간 애플리케이션.

각 패턴은 특정 요구 사항에 맞춰 적절히 선택하는 것이 중요함

2. MVP, MVVM, MVI의 차이점

  • 이 세 가지 아키텍처 패턴은 모두 UI와 비즈니스 로직을 분리하는 데 초점을 맞춤
  • 각각의 구성 요소와 데이터 흐름 방식에서 차이를 보임

2-1. 구성 요소 및 역할

패턴구성 요소역할
MVPModel데이터와 비즈니스 로직을 관리. View나 Presenter에 데이터를 제공.
ViewUI와 사용자 입력 처리. 로직은 포함하지 않으며, Presenter에 이벤트 전달.
PresenterView와 Model 간의 중간 관리자. 로직을 처리하고 View에 업데이트를 명령.
MVVMModel데이터와 비즈니스 로직 관리.
View사용자와 상호작용. ViewModel과 양방향 데이터 바인딩을 통해 UI를 업데이트.
ViewModelView와 Model 사이에서 상태 관리. 데이터를 변환해 View에 제공.
MVIModel애플리케이션 상태를 관리하는 단일 진리 소스(Single Source of Truth).
ViewModel의 상태를 구독하여 UI를 렌더링. Intent를 Model로 전달.
Intent사용자의 이벤트를 Model로 전달하여 상태 변경을 트리거.

2-2. 데이터 흐름 방식

패턴데이터 흐름 방식특징
MVP양방향 흐름Presenter는 Model과 View 간의 데이터를 주고받으며 중간 관리자 역할.
MVVM양방향 데이터 바인딩ViewModel은 Model과 View를 연결하며, 데이터 바인딩을 통해 상태를 자동으로 동기화.
MVI단방향 데이터 흐름 (Unidirectional)Intent → Model → State → View 순으로 한 방향으로만 상태 업데이트. 이벤트 기반.

2-3. 패턴 간 주요 차이점

항목MVPMVVMMVI
View의 역할View는 UI를 보여주고, Presenter와 직접 상호작용.View는 ViewModel과 데이터 바인딩.View는 상태를 구독하고, Intent를 Model로 전달.
중간 관리자Presenter가 중간 관리자 역할.ViewModel이 상태 관리 및 데이터 변환 담당.Intent와 Model이 상태 업데이트를 담당.
데이터 바인딩없음. 로직은 Presenter에서 수동으로 처리.자동 데이터 바인딩(View ↔ ViewModel).데이터 바인딩 대신 단방향 흐름을 강제.
테스트 용이성View가 Presenter에 의존적이라 테스트가 복잡.View와 ViewModel이 분리되어 테스트 용이.단방향 흐름으로 테스트가 체계적.
복잡도단순한 구조, 적은 학습 곡선.중간 정도. 데이터 바인딩 도구 필요.복잡한 단방향 흐름 관리 필요.

2-4. 데이터 흐름 비교

MVP

  • View → Presenter → Model (사용자 이벤트 처리)
  • Model → Presenter → View (데이터 갱신)
  • 양방향 데이터 흐름으로 Model과 View를 Presenter가 직접 연결.

MVVM

  • View → ViewModel → Model (사용자 입력 처리)
  • Model → ViewModel → View (데이터 갱신)
  • 데이터 바인딩을 통해 View와 ViewModel 간의 동기화가 자동으로 이루어짐.

MVI

  • Intent → Model → State → View (단방향)
  • 상태는 불변 객체로 관리하며, 상태 변경은 명확한 흐름을 따름.
  • 이벤트 기반으로 View는 상태만 구독하고 Intent를 전달.

2-5. 장단점

패턴장점단점
MVP- 간단한 구조로 이해와 구현이 쉬움.- View와 Presenter 간 강한 의존성으로 인해 테스트가 어려울 수 있음.
- 소규모 프로젝트에 적합.- 로직이 복잡해질수록 Presenter가 비대해질 가능성.
MVVM- View와 로직이 분리되어 테스트와 유지보수가 용이.- 데이터 바인딩이 필수적이며, 구현 복잡도 증가.
- ViewModel로 상태 관리가 효율적.- 대규모 프로젝트에서 과도한 데이터 바인딩은 디버깅을 어렵게 만듦.
MVI- 단방향 데이터 흐름으로 로직이 명확하고 디버깅이 쉬움.- 단방향 상태 관리 구현이 비교적 복잡.
- 상태 관리가 철저히 구조화되어 안정적인 앱 개발 가능.- 불변 객체와 단방향 흐름으로 오버헤드 증가 가능.

결론

  • MVP: 간단한 앱, 논리적으로 Presenter가 핵심인 프로젝트에 적합.
  • MVVM: 데이터 바인딩을 지원하는 프레임워크(Angular, React, WPF 등)에 적합. 복잡한 UI 상태 관리에 유리.
  • MVI: 단방향 데이터 흐름이 필요한 대규모 앱이나 복잡한 상태 관리가 중요한 프로젝트에 적합(예: Redux, Jetpack Compose).

필요와 상황에 맞춰 선택하면 됨

profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글