activity와 fragment는 view 역할을 하고,
사용자 입력이 들어오면 view가 viewmodel의 data를 observing하면서 Ui update.
viewmodel이 data를 hold 하고 있어서 메모리 릭 발생 가능성 배제.
(view가 model에 접근하지 않아 activity, fragment 라이프 사이클에 의존하지 않기 때문)
기능 별 모듈화가 잘되어 있어 유지보수에 용이(viewmodel 재사용 및 db 교체 등의 작업이 쉬움)
장점
1. View와 Model, View와 ViewModel 사이의 결합도가 느슨하다.
2. 단방향으로 의존 관계가 있어서 모듈화하여 개발하기 때문에 협업에 좋다.
3. 유닛 테스트 하기 좋다.
단점
1. 다른 디자인 패턴에 비해 설계가 어렵고 복잡하다.
2. 다른 라이브러리 개입이 많아서 러닝 커브가 있을 수 있다.
3. ?