MVC 패턴
- Model, View, Controller
- 기존에 많이 사용하던 패턴
단점
- 코드 간의 연관성이 밀접해서 규모가 클수록 유지보수가 힘들어짐
- View를 수정할 경우 Controller를 같이 수정해야 하는 경우가 생김
- Controller를 수정할 경우 Model을 같이 수정해야 하는 경우가 생김
MVVM 패턴
- Model, View, ViewModel
- ViewModel이 View를 참조하지 않기 때문에 의존성이 없음
- ViewModel이 View의 상태를 관찰함
- UI 로직과 비즈니스 로직을 분리해 가독성을 높이고 유지보수가 용이해짐
Model
- 데이터를 저장하는 클래스
- 기존 패턴에서 사용하던 Model과 같은 역할
View
- UI를 나타내는 역할
- ViewModel에게 받은 데이터로 화면을 갱신하는 역할
ViewModel
Model로부터 View에 필요한 데이터를 가져와서 처리하고 해당 데이터를 View에 보여주는 역할
ViewModel 정리글
예제
안드로이드 MVVM 패턴 연습 프로젝트
Clean Architecture
- 계층을 나누어서 관심사를 분리하고, 각 분리된 클래스가 한가지 역할만 할 수 있도록 구현하는 방식
- 안드로이드에서의 Clean Architecture는
Presentation Layer
, Domain Layer
, Data Layer
로 이루어짐
- Presentation Layer (UI Layer) : 데이터, 도메인 계층에 의존성을 가지고 있음, 화면과 입력에 대한 처리를 함
- View : UI를 표시 (Activity, Fragment)
- Presenter : ViewModel과 같이 UI 업데이트와 관련된 일을 수행, UseCase를 사용
- Domain Layer : 독립적인 계층으로 의존성이 없음, 다른 계층의 변경이 도메인 레이어에 영향을 끼쳐서는 안됨
- UseCase : 비즈니스 로직이 들어 있는 영역, Repository를 사용
- Entity : 앱의 실질적인 데이터
- Repository(Interface) : 관련된 행동을 정의, 도메인 레이어를 독립적으로 만들기 위해 Repository를 Interface와 구현체로 분리해야함
- Data Layer : 도메인 레이어에 의존성을 가지고 있음
- Repository(구현체) : 데이터의 저장 및 수정 등의 기능을 제공하는 영역
- Data Source : 실제 데이터의 입출력이 실행됨
참조