728x90
MVC 패턴
Model + View + Controller
Model : 데이터와 데이터를 처리하는 부분
View : UI
Controller : 사용자의 입력(Action)을 받고 처리하는 부분
MVC 패턴의 동작 순서
- Controller에 사용자의 입력(Action)을 받는다.
- Controller에서 Action을 확인하고 Model을 업데이트(조작)한다.
- Controller에서 해당 Data를 보여줄 View를 선택
- View는 Model을 사용하여 화면에 보여준다.
이 때, Controller는 View를 선택만하고 업데이트를 시켜주지 않기 때문에 View는 Model을 이용하여 업데이트 하게 된다.
View가 업데이트 하는 방법으로는
- Model을 직접 사용한다.
- Model에서 VIew에게 Notify 해준다.
- View에서 Polling을 통해 Model의 변화를 알아채 업데이트 한다.
MVC 패턴의 특징.
- Controller와 View는 1:1 관계가 아닌 1:N 관계로, Controller가 여러 개의 View를 선택하여 Model을 나타낼 수 있다.
- View와 Model 서로간의 의존성이 높다는 단점이 있다.
따라서, View와 Model간의 의존성을 최대한 낮게 설계한 경우 좋은 MVC 패턴이라 할 수 있다.
MVP 패턴
Model + View + Presenter
Model, View 는 MVC와 동일
Presenter : View에서 요청한 정보를 Model로 부터 가공하여 View로 전달한다. Model과 View의 다리같은 역할.
MVP 패턴의 동작 순서
- 사용자의 Action을 View로 받는다.
- View에서 받은 이벤트를 Presenter에게 전달한다.
- Presenter에서 Model로 데이터를 요청한다.
- Model에서 Presenter로 요청에 따른 응답을 한다.
- Presenter에서 결과를 바인딩하여 View로 통보한다.
- 받은 정보를 토대로 View를 업데이트 한다.
MVP 패턴의 특징
- Presenter를 통해 Model과 View를 완벽히 분리해 주기 때문에, MVC 패턴에 있던 Model과 View 사이의 의존성을 해결하였다.
- Presenter와 View는 1:1 관계이기 때문에 View와 Presenter 사이의 의존성이 매우 강하다.
즉, 기존의 MVC 패턴에서 문제가 되던 의존성을 없애고 새로운 의존성이 생겼다.
MVVM 패턴
Model + View + View Model
Model, View 는 MVC와 동일
View Model : View를 나타내기 위한 Model. View 보다는 Model과 유사하게 디자인 되며, View에 나타내기 위한 데이터를 처리한다.
MVVM 패턴의 동작 순서
- View에서 사용자의 Action을 받는다.
- DataBinding을 통하여 ViewModel에서 직접 이벤트를 받는다.
- ViewModel에서 필요한 데이터를 Model에 요청한다.
- Model은 필요에 따른 Data를 만든 후, ViewModel에 반환한다.
- ViewModel에서 추가적인 가공을 진행한 후 필요한 데이터를 저장한다.
- View는 ViewModel의 Data를 Observing하고 있다가 변경을 감지하면 변경된 값으로 화면을 갱신한다.
MVVM 패턴의 특징
- Command 패턴과 Data Binding을 사용한다.
- 위의 두 개를 사용함으로써 View Model과 View 사이의 의존성을 없앴다.
- View Model과 View는 N:1 관계이다.
- MVC, MVP 패턴에 비해 설계가 어렵다.
728x90
'Android > Architecture' 카테고리의 다른 글
[Android] Clean Architecture 실전 압축 정리 - Data Flow (0) | 2022.02.10 |
---|---|
[Android] Clean Architecture 실전 압축 정리 - 예제 (5) | 2022.02.09 |
[Android] Clean Architecture - UseCase 란 ? (0) | 2022.02.06 |
[Android] Clean Architecture 실전 압축 정리 - 개념 (0) | 2022.02.04 |
[Android] 싱글톤(Singleton) 패턴 (0) | 2020.06.11 |