본문 바로가기

Architecture, Pattern

[Android] MVVM - ViewModels AntiPatterns

#ViewModel Antipattens

대표적인  Android ViewModel Antipattern 2가지

 

[Antipattern]

1. Android Framework 종속성을 가지는 클래스를 사용

  • (Don’t let ViewModels (and Presenters) know about Android framework classes)
  • 테스트나, 메모리 누수나, 모듈성을 위해서 일반적으로 android.*  클래스들을 ViewModel에서 사용하지 말란 뜻( but 예외도 있음 android.arch.* 같은.. )  

2. ViewModel에서  View 를 Reference

  • ( Avoid references to Views in ViewModels.)
  • View와  ViewModel이 아래 그림과 같이 생명주기가 다르므로 ViewModel이 이미 destroy되거나 재생성되기 이전 Acticity를 참조할 가능성이 있기 때문. 이는 심각한 Memory leak이나  Crash를 발생시킴.
  • 예를 들어 ViewModel이 네트워크 요청을 했는데 오래 걸리는 경우에 그사이  Activity가 재생성 된다면, 요청이 끝난 시점에 ViewModel에서 가지고 있던 View를 참조하면..! 문제가 생길 수 있다는 것 (옜날 View니까)

Configuration이 바뀌어 Activity가 재생성 되어도 ViewModeld은 그대로 살아있다

 

이 외에 LiveData와 함께 사용 되는 다양한 ViewModel 패턴은 아래를 참고

 

[참고] ViewModels and LiveData: Patterns + AntiPatterns

https://medium.com/androiddevelopers/viewmodels-and-livedata-patterns-antipatterns-21efaef74a54