안드로이드 학습(Kotlin)

25. 아키텍처의 이해 (MVC, MVP, MVVM, Clean)

리저브콜드브루 2025. 2. 19. 10:26
728x90
반응형

MVC (Model-View-Controller)

  • Model
    • 데이터와 비즈니스 로직을 담당
    • 데이터베이스나 API와 상호작용하며 데이터의 상태를 관리
  • View
    • 사용자 인터페이스(UI)를 담당
    • 사용자와 상호작용하며 데이터를 표시
  • Controller
    • Model과 View를 연결
    • 사용자의 입력을 받아 Model에 전달하고, Model의 변경사항을 View에 반영

 

안드로이드에서

  • View
    • XML 레이아웃 파일 (UI 정의)
  • Model
    • 데이터 클래스, 비즈니스 로직 (예: 데이터베이스, 네트워크 호출)
  • Controller
    • Activity 또는 Fragment가 View와 Model을 연결하는 역할을 담당

 

단점

  • Activity/Fragment가 Controller와 View 역할을 모두 담당하기 때문에 비대해지는 문제(God Object)가 발생
  • 테스트하기 어려움

MVP (Model-View-Presenter)

  • Model
    • 데이터 및 비즈니스 로직을 담당 (MVC와 동일)
  • View
    • UI와 사용자 입력을 담당하며 Presenter와 통신
  • Presenter
    • View와 Model 간의 중재자 역할을 하며, 비즈니스 로직을 처리하고 View에 데이터를 전달

 

안드로이드에서

  • View
    • Activity, Fragment, XML
  • Model
    • 데이터 클래스 및 비즈니스 로직
  • Presenter
    • 비즈니스 로직과 View 업데이트 로직 담당 (UI에 직접 접근하지 않음)

 

특징

  • View와 Presenter 간의 통신은 인터페이스를 통해 이루어짐
  • View는 Presenter를 호출하며, Presenter는 View 인터페이스를 통해 UI를 업데이트

 

장점

  • 테스트 가능성 증가: View와 로직이 분리되므로 Presenter를 단위 테스트하기 쉬움
  • UI와 비즈니스 로직 간의 명확한 분리

MVVM(Model-View-ViewModel)

  • Model
    • 데이터와 비즈니스 로직을 담당
  • View
    • UI를 담당하며, ViewModel과 데이터 바인딩(Data Binding)으로 연결
  • ViewModel
    • Model에서 데이터를 가져와 View에서 사용할 수 있도록 가공. UI에 필요한 상태를 유지하고 관리

 

안드로이드에서

  • View
    • XML 레이아웃 + Activity/Fragment
  • Model
    • 데이터 클래스 및 비즈니스 로직
  • ViewModel
    • Android의 ViewModel 클래스를 활용. ViewModel은 LiveData/StateFlow로 데이터를 노출하고 View는 이를 구독하여 상태반영

 

특징

데이터 바인딩이나 LiveData, StateFlow와 함께 사용

View는 ViewModel에서 제공하는 데이터를 관찰하고 UI를 업데이트

 

장점

ViewModel은 Android 생명주기에 안전하게 작

View와 Mode 간의 의존성이 감소

데이터 변경에 따라 UI가 자동으로 업데이트 (Reactive Programming)

단점

러닝 커브가 있음(특히 데이터 바인딩 사용 시)


 

클린 아키텍처 (Clean Architecture)

 

개념

  • 로버트 C.마틴 (Robert C.Martin)이 제안한 소프트웨어 설계 원칙
  • 애플리케이션을 레이어로 나누고, 레이어 간 의존성을 내부에서 외부로 흐르는 설계
  • 의존성 규칙: 내부 레이어는 외부 레이어에 의존할 수 없고, 외부 레이어는 내부 레이어에 대한 인터페이스를 통해 접근

 

구조

  • Entities
    • 애플리케이션의 핵심 비즈니스 로직과 규칙을 포함
    • 독립적이며, 데이터베이스나 UI와 같은 세부 사항에 의존하지 않음
  • Use Cases
    • 애플리케이션의 구체적인 비즈니스 규칙을 포함
    • Entities를 활용해 사용자 액션을 수행
  • Interface Adapters
    • 데이터 변환을 담당
    • Use Cases와 Framework/Database 사이에서 데이터를 변환하여 전달
  • Frameworks ans Drivers
    • 데이터베이스, 네트워크 API, UI 등 외부 세부 사항

 

안드로이드에서

  • Entities
    • 도메인 계층의 데이터 모델
  • Use Cases
    • 비즈니스 로직을 담당하여 ViewModel에서 호출
  • Interface Adapters
    • ViewModel, Repository 패턴
  • Frameworks and Drivers
    • Room, Retrofit, WorkManager 등

특징

  • 변경 용이성
    • UI, 데이터베이스, 네트워크 등 각 레이어의 변경이 다른 레이어에 영향을 주지 않음 테스트 가능성 증가

MVC, MVP, MVVM, 클린 아키텍처 비교

특징 MVC MVP MVVM 클린 아키텍처
UI와 로직분리 부분적으로 분리 완전히 분리 완전히 분리 완전히 분리
테스트 용이성 낮음 중간  높음 매우 높음
복잡도 낮음 중간 중간-높음 높음
적용성 소규모 프로젝트 중소규모 프로젝트 중대규모 프로젝트 대규모 프로젝트
추천 사례 간단한 UI/로직 통합 프로젝트 UI와 로직의 복잡도가 있는 경우 데이터 바인딩/Reactive 활용 시 대규모 엔터프라이즈

 

728x90
반응형