오늘도 더 나은 코드를 작성하였습니까?

ViewModel 사용시 주의해야 할 점. 본문

Android Jetpack Architecture/ViewModel

ViewModel 사용시 주의해야 할 점.

hik14 2020. 8. 21. 16:56

안드로이드 아키텍쳐 컴포넌트인 ViewModel은 유용한 기능을 제공해주는 반면 사용에 제약도 따른다.

 

1. ViewModel은 절대로 Activity나 Fragmemt 또는 View의 Context를 참조해서는 안된다.

언제든 생성 및 파괴될수있는 객체의 참조를 ViewModel에게 유지시키는 일은 파괴된 Activity를 ViewModel에서 유지 시킴으로서 메모리 누수를 발생시킨다. 시스템의 Context가 필요한경우 AndroidViewModel을 사용해라.

 

2. ViewModel에서 안드로이드 프레임워크 코드를 참조하면안된다.

프레임 워크 코드를 참조하게되면 단위테스트가 불가능해진다. ViewModel은 View에 표현할 데이터및 비지니스 로직을 지녀야 한다. 

 

3. Dagger2및 ViewModel은 사용을 신중하게 해야된다. Dagger2는 자신만의 scope를 지정하고 인스턴스를 관리하며, ViewModel 또한  스스로 인스턴스를 관리한다. 

 

이 둘의 Scope가 다르기 때문에 Dagger2의 오브젝트 그래프에서 제공하는 객체와ViewModel이 같이 사용된다면, Activity가 재생성 되었을때 객체의 동일성이 깨질수있다.

 

4. ViewModel에서 getString( R.String. xx) 통해 문자열을 관리하는 경우.  시스템언어를 변경해도 이전 언어의 문자열이 남아있다. ViewModel에서 View와 Binding 할때 리소스의 아이디를 참조하여 올바른 언어 문자열이 반영되도록한다.