안드로이드 학습(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
반응형