728x90
반응형
어떤 아키텍쳐를 선택 기준
- 깔끔한 코드분리가 가능한가
- Testing가능한 구조를 만들 수 있는가
- View와 Model간의 관계를 분리할 수 있는가
- 많은 코드를 손대지 않고, 유지보수 가능한가
Activity / Fragment/Adapter
- view/control 역할을 함께한다. (예: OnClickListerner)
- Adapter의 경우Control/Model도 가질 수 있다.
안드로이드에서 활용 가능한 Architecture
MVC : Model View Control
- Model + View + Controller
- Controller : 사용자의 입력(Action)을 받고 처리하는 부분입다.
- Controller는 View를 선택할 뿐 직접 업데이트 하지 않습니다. (View는 Controller를 알지 못합니다.)
- View는 Model을 이용하여 화면을 나타냅니다
- View와 Model 사이의 의존성이 높다는 것입니다. View와 Model의 높은 의존성은 어플리케이션이 커질 수록 복잡하지고 유지보수가 어렵
MVP : Model View Presenter
- Model + View + Presenter
- Presenter : View에서 요청한 정보로 Model을 가공하여 View에 전달해 주는 부분입니다. View와 Model을 붙여주는 접착제 역할
- MVC 패턴의 단점이었던 View와 Model의 의존성을 해결 (Presenter를 통해서만 데이터를 전달 받기 때문)
- 그러나, View와 Presenter 사이의 의존성이 높음
MVVM : Model View ViewModel
- Model + View + ViewModel
- View Model : View를 표현하기 위해 만든 View를 위한 Model. View와 Model 사이에서 데이터를 관리해주고 바인딩 해주는 역할
- Command 패턴과 DataBinding을 사용하여 View와 Model 사이의 의존성이 없음
MVVM ViewModel과 AAC ViewModel의 차이
- MVVM의 ViewModel의 역할
- View와 Model 사이에서 데이터를 관리해주고 바인딩 해주는 역할
- AAC의 ViewModel의 역할
- 화면 회전 같은 환경에서 데이터를 보관하고 라이프사이클을 알고있어서 Activity나 Fragment의 Destroy시 onClear 함수를 통한 데이터 해제의 역할을 하고있습니다. (데이터를 관리하고 바인딩하라는 목적아님)
- AAC ViewModel을 아키텍처 MVVM ViewModel 처럼 사용 가능. 거기에 화면회전에 대한 데이터 유지까지 있으니 더 좋겠죠. 하지만 AAC ViewModel은 Activity 내에서 1개만 생성가능합니다.
- AAC ViewModel은 Activity안에서의 싱글톤 개념인데 MVVM 패턴에서 뷰와 뷰모델은 1:n 관계를 가지기 때문에 Activity 내의 여러 Fragment를 가질시에 여러 Fragment에 ViewModel을 사용하긴 어렵겠죠?
결론
- 팀 내에서 잘 맞는 Architecture 선택해야한다.
- MVC는 View에서 모델을 사용하기 때문에 공통 코드를 잘 분리해야한다.
- MVP/MVVM은 기본적으로 View/Model간의 결합도를 낮츨 수 있다.
- 컴포넌트 분리를 함으로써 테스트 가능한 코드를 작성해야한다.
- 앱 구성요소는개별적이고 비순차적으로 실행될 수 있으며, 운영체제나 사용자가 언제든지 앱 구성요소를 제거할 수 있습니다.
- 따라서 앱 구성요소에 앱 데이터나 상태를 저장해서는 안 되며 앱 구성요소가 서로 종속되면 안 됩니다.
- 아키텍처 원칙은
- 1) 관심사 분리 : UI 기반의 클래스는 UI 및 운영체제 상호작용을 처리하는 로직만 포함해야 함
- 2) Model에서 UI 도출하기 : Model은 앱의 View 객체 및 앱 구성요소와 독립되어 있으므로 앱의 수명 주기 및 관련 문제의 영향을 받지 않음, 데이터나 상태를 저장
참고
www.inflearn.com/course/next-android-kotlin/lecture/13630?tab=note&speed=2
728x90
반응형
'Clean Software > Design Pattern' 카테고리의 다른 글
[디자인 패턴] Iterator(반복자 패턴) (0) | 2022.02.16 |
---|---|
디자인 패턴(Design patterns) - 적절한 디자인패턴 선택방법과 사용법 (0) | 2022.02.14 |
디자인 패턴(Design pattern) - 객체지향 개발시 발생되는 어떤 문제를 해결해줄까 (0) | 2022.01.26 |
디자인 패턴(Design pattern) - 정의 및 분류 (0) | 2021.04.25 |
디자인 패턴(Design pattern) - 목차 (0) | 2021.04.08 |