안드로이드 아키텍쳐는 크게 4가지로 분류할 수 있다
Model View Controller로 구성되는 아키텍쳐 패턴으로 웹에서 주로 사용되던 패턴이었다.
문제점은 안드로이드에서는 Activity나 Fragment가 View와 Controller 역할을 동시에 수행하는 경우가 많다.
즉 의존성이 강하여 테스트에 용이하지 않고 유지보수가 어렵다
또한 UI 로직이 Controller에 집중되어 복잡한 UI 환경에서는 Controller가 지나치게 비대해지는 문제가 존재했다.
이를 개선하고자 MVP 패턴이 등장하였다.
Model View Presenter로 구성되는 아키텍쳐 패턴으로 MVC의 문제점을 보완하고자 View와 Model사이에 Presenter라는 중재자를 두어서
사용자의 입력을 View에서 처리하고 그에 따라 Model을 업데이트하며 Model의 데이터를 View에 전달하여 UI를 업데이트한다.
View와 Model이 서로 의존하지 않게 되었으나 여전히 View와 Presenter 사이의 강한 의존성이 존재하였다.
이 의존성을 보다 줄이기 위해 등장한 패턴이 MVVM이다.
MVI 패턴은 별도의 글로 공부해보거나 이후 추가해야겠다.
Model View ViewModel로 구성되는 아키첵텍쳐 패턴으로 UI 및 비 UI 코드를 분리하기 위한 UI 아키텍처 디자인 패턴이다.
왜 MVVM을 사용할까?
또한 MVVM은 상태의 유지를 도와준다는 이점이 존재한다.
View에 해당하는 MainActivity에서 Model을 다룬다면 화면 회전 등과 같은 과정에서 데이터의 온전함을 보장할 수 없지만 MVVM은 상태가 유지될 수 있도록 해준다.
ViewModel은 View의 존재를 모른다, 즉 MVVM에서는 ViewModel에서 UI를 조작하지 않는다.
그렇기에 ViewModel은 유지하면서 View만 교체하여 테스트해볼 수도 있고 다른 View에서도 사용하여 코드 재사용성을 높일 수 있다.