컴퓨터공부/Android

ViewModel에 대한 Insight

achivenKakao 2024. 2. 22. 20:23

1. ViewModel에서 View(Fragment, Acivity)에 직접 접근하거나 제어 해서는 안된다.

2. ViewModel에서 View를 변경하고 싶으면 LiveData나 Callback 혹은 Function Reference를 사용하면 된다.

  • 예를 들어, 특정 View를 보이지 않게 하고 싶으면
  • "val enableLayoutVisibility = MutableLiveData<Boolean>()" 같은 변수를 사용하여 Observe 패턴으로 Fragment나 Activity에서 제어 하면 된다.

3. 장점

    View와 Business logic을 분리 할 수 있으며, 이것은 많은 장점을 갖는다.

  • View는 오직 View의 처리만 담당하므로 보기가 편하다.
    • 이런 관심사의 분리가 발전하여 Compose UI를 탄생하게 한 것 같다.
      • View에서 ViewModel의 LiveData변수들을 하나하나 Observe 패턴으로 작성하는 것보다
      • LiveData변수를 setContent() 함수의 인자로 사용하면, Compose UI에서 알아서 Observe 패턴 처럼 동작하게 해준다.
  • ViewModel은 오직 Business logic만 담당하므로 unit test를 추가 할 때 매우 유용하다.
    • View에 관한 내용이 없으므로, ViewModel내의 모든 함수들과 Business logic을 깔끔하게 테스트 할 수 있다.