📍 ViewModel
ViewModel은 View와 Model 사이의 매개체 역할을 한다. Model에서 가져온 데이터를 UI에 필요한 정보로 가공하고 View가 가져갈 수 있도록 해당 데이터 변경에 대한 notify를 보낸다.
ViewModel과 View은 1:다 관계를 가질 수 있다. 즉, 하나의 ViewModel을 여러개의 View에 사용할 수 있다.
ViewModel은 View의 Context에 대한 레퍼런스를 가지면 안된다.
👉View는 ViewModel의 레퍼런스를 가지지만, ViewModel은 View에 대한 정보가 전혀 없어야 한다. 만약 ViewModel이 View의 레퍼런스를 가진다면, Lifecycle에 메모리 누수가 발생할 수 있다. ViewModel이 destroy() 이외의 라이프사이클에서는 메모리에서 해제되지 않기 때문이다.
📍 View
Activity, Fragment, CustomView, Dialog 등의 UI 컴포넌트이다.
View는 UI 업데이트를 위해 ViewModel과 바인딩하게 된다. View가 ViewModel에 구독을 하게 되고, ViewModel의 상태가 변경되면 그 이벤트를 받아 UI를 갱신한다.
📍 Model
Network, DB, SharedPreferences 등 다양한 Data Source 로부터 필요한 데이터를 준비한다.
ViewModel에서 데이터를 가져갈 수 있게 데이터를 준비하고, 그에 대한 이벤트를 보낸다.
MVVM은 아래와 같은 형태로 동작하게 된다.
- 사용자의 Action이 View를 통해 들어옴
- View에 Action이 들어오면, ViewModel에 Action을 전달
- ViewModel은 Model에게 데이터 요청
- Model은 ViewModel에게 요청받은 데이터를 응답
- ViewModel은 응답 받은 데이터를 가공하여 저장
- View는 ViewModel과 DataBinding하여 화면을 나타냄
👉NEXT
MVVM패턴을 사용하여 위와 같이 동작하는지 확인