블로그에서 정리한 내용를 보고 내 나름대로 이해하고 느낀점을 정리해 보려고 한다.
MVC 패턴의 특징은 사용자 Action이 Controller로 들어오며, 모델에서 처리한 데이터를 뷰로 직접 넘겨준다는 점, 그리고 Controller와 뷰와의 관계가 1:n이라는 점이 있다.
단점으로는 뷰와 모델 사이의 의존성이 높아지게 되어 유지보수가 어려워진다는 단점이 있다. 실제로 생각해 봤을때 모델에서 뷰로 데이터를 직접 넘겨주게 되면, 같은 로직을 수행하는 메소드를 두개의 각각 다른 뷰에 넘겨주기 위해 중복된 코드를 적는다던지..? 하는 일이 생길것 같다.
개인적인 생각이지만, Spring의 MVC패턴은 사실 MVP패턴에 더 가까운것 같다.
MVP패턴의 특징은 View를 통해 사용자 액션이 들어오고, Presenter가 Model로부터 받은 데이터를 View로 넘겨주며, Presenter와 View가 1:1 관계에 있다는 점이다.
여기서 Model이 View에게 데이터를 직접 넘겨주는게 아니라 Presenter를 거쳐서 넘겨주기 때문에 Model과 View 사이의 의존성이 없다는 장점이 있다. (위에서 Spring MVC는 MVP에 더 가깝다고 한 이유)
MVP는 View와 Presenter 사이의 의존성이 높다는 단점이 있다. 그리고 Presenter와 View가 1:1 관계이기 때문에 중복코드가 많이 발생할 수 있다.
MVVM은 안드로이드에서 가장 많이 사용되는 설계 패턴이다. View를 통해 요청이 들어오면 ViewModel에서 Model에게 데이터 처리를 요청하고 처리한 데이터를 받으면 View에서 ViewModel을 관찰하다가 처리된 데이터를 적용한다.
여기서 주목할 점은 ViewModel이 View에게 데이터를 직접 전달하는게 아니라 View에서 ViewModel을 관찰하고 있다가 알아서 바뀐 데이터를 적용한다는 점이다. 이걸 가능하게 하는게 Databinding과 반응형 프로그래밍(RxJava, LiveData) 이다.
ViewModel은 View를 모르고 있기 때문에 View와 ViewModel 사이의 의존성 또한 없앤 디자인 패턴이다.