MVVM 디자인 패턴은 Model-View-ViewModel 이라는 세가지 구성요소를 통해 비즈니스 로직과 View를 구분한다.
마찬가지로 Android 환경에서 같은 이름의 AAC ViewModel이 MVVM ViewModel의 역할을 한다고 생각했지만 이름만 같을 뿐 실제로는 다른 역할을 수행하게 된다.
흔히 Android 개발 환경에서 MVVM패턴을 많이 사용해서 오용하는 경우가 있지만, 공식문서의 디자인 패턴에서 MVVM패턴은 언급되지 않는다.

Developers에서 ViewModel 항목을 읽어보면 비즈니스 로직 또는 화면 수준 상태 홀더(screen level state holder) 의 역할을 수행한다.
Android에서의 ViewModel은 상태 변화가 일어나는 환경에서 UI 관련 데이터를 Lifecycle 내에서 관리하고 유지하는 클래스이다.
해석하면 AAC ViewModel은 데이터의 관리와 Binding의 목적보다는 Activity나 Fragment을 다시 그려야 할 경우 데이터를 다시 로드시키거나 이로인해 발생하는 사이드이펙트의 최소화가 주 목적인 클래스다.
MVVM에서의 ViewModel은 View와 Model을 이어주는 Binding이 주 목적인 클래스다.
값의 변경이 발생하면 그 상태를 View에 알리고 View는 그 변경을 반영하게 된다.
흔히 사용하는 MutableLiveData 나 MutableStateFlow와 Observer등이 이 역할을 하며 View는 Activity나 Fragment가 아닌 @Composable 이나 XML같은 View에 직접 전달해야 MVVM을 제대로 구현했다고 할 수 있다.
Activity나 Fragment에서 ViewModel을 통해 observer패턴을 구현하면 View가 ViewModel이 아닌 Activity나 Fragment를 의존하기 때문에 잘못 구현된 MVVM의 사례라고 한다.
그러나 Android 환경에서 가장 많이 사용하는 패턴이 MVVM인 만큼 MVVM은 AAC ViewModel과 함께 구현할 수 있다.
주 목적은 아니지만 AAC ViewModel에서 State의 관리를 전담하고 binding할 요소를 추가해주면 일반적으로 사용하는 MVVM ViewModel처럼 사용하게 된다.
하지만 AAC ViewModel을 사용했다고 MVVM 패턴을 차용한 것은 아니므로 디자인 패턴과 의존성에 유의해야 한다.
추가로 공식 문서에서는 Activity와 ViewModel을 1대1로 두고 사용하는 방법을 권장한다.