728x90
안드로이드에는 다양한 아키텍처 구조가 존재한다.
오늘은 MVVM 패턴에 대해서 공부해보려고 한다.
MVVM는 간단하게 Model, View, ViewModel의 약자입니다.
MVVM의 구조는 MVC, MVP의 단점을 보완한 구조로 하나의 앱 아키텍처를 최대한 기능적으로 작은 단위로 나누어 테스트가 쉽고 큰 프로젝트도 상대적으로 관리하기가 좋은 구조입니다.
MVVM은 모든 입력들이 View로 전달되며, ViewModel은 입력에 해당하는 Logic을 처리하여 View에 데이터를 전달합니다. ViewModel은 View를 따로 참조하지 않기때문에 독립적이며 ViewModel과 View는 1:N관계입니다.
따라서 View는 자신이 이용할 ViewModel을 선택해 데이터를 바인딩하여 업데이트를 받게됩니다.
그 후 Model이 상태 및 데이터가 변경되면 해당하는 ViewModel을 이용하는 View가 자동으로 업데이트 됩니다.
MVVM 패턴은 또한 Presenter에 의존하지 않고, Observer Parttern을 이용해 객체의 변경이 일어날 때마다 UI를 갱신하도록 만들었다.
Observer Pattern
상태 변화가 있을 때마다 메서드를 통하여 관찰 대상자가 직접 옵저버들에게 통지하여 상태를 동기화할 수 있도록 하는 디자인 패턴을 의미합니다.
즉, 객체에 변화가 일어날 때마다 콜백이 일어나게 됩니다.
Model, View, ViewModel의 특징을 정리해보자.
Model
- ViewModel에서 데이터를 가져갈 수 있게 데이터를 준비하고 그에 대한 Event를 보낸다.
View
- View는 Activity나 Fragment 같은 화면에 표현되는 레이아웃을 정의함.
- View는 ViewModel을 관할하고 있다가 상태변화가 감지되면 화면을 업데이트 해야한다.
- 안드로이드는 생명주기라는 특수한 Flow를 가지고 있기때문에 UI변경과 관련된 일부 로직이 포함될 수 도 있다.
ViewModel
- View와 Model 사이에 매개체 역할을 함
- View와 ViewModel은 N:1관계를 가지며 여러개의 Fragment가 하나의 ViewModel을 가질수도 있다.
- ViewModel은 View가 DataBinding 할 수 있는 속성과 명령으로 구성되어 있다.
- 모든 View와 관련된 비즈니스 로직은 이 곳에 들어가게 되며 데이터를 잘 가공해서 View에서 뿌리기 쉬운 Model로 바꾸는 역할을 한다.
MVVM의 장점
- Model과 View사이, ViewModel 사이의 의존성이 없다. (독립적이다,)
- 유닛테스트가 MVP보다 훨씬 더 쉬워진다.
- Binding하기 때문에 코드의 양이 훨씬 줄어든다.
MVVM의 단점
- 설계가 너무너무 어렵다.
- View가 변수와 표현식 모두에 binding될 수 있으므로 시간이 지남에 따라 관계없는 Presentation Logic이 늘어나고 이를 보완하기 위해서 XML에 코드가 추가된다.
- Data Binding이 필수적으로 요구된다.
- 다양한 곳에서 많은 데이터를 받기 때문에 관리를 제대로 못 할 경우 버그가 발생합니다.
참고 :
728x90
'Android > Study' 카테고리의 다른 글
[Android] Clean Architecture(클린 아키텍처) 란 (0) | 2023.01.07 |
---|---|
[Android] Android 란? (0) | 2023.01.04 |
[Android] MVP 패턴이란? (0) | 2023.01.01 |
[Android] MVC 패턴이란? (0) | 2023.01.01 |
[Android] Notification(노티피케이션) (0) | 2022.10.18 |