본문 바로가기

IT/안드로이드 관련

나만의 ViewModel 이해하기 1

안녕하세요 남갯입니다.


오늘은 ViewModel에 대해 공부한 부분을 써보려고합니다.


과거 MVC -> MVP -> MVVM까지 안드로이드에서 사용하는 아키텍쳐에 관심이 생겨서 계속 공부하게 되었고


그중 MVVM에서의 ViewModel을 공부하다가 정리한 글을 한번 써보려고 합니다.


MVVM이란 Model View ViewModel을 뜻하며, 


Model 이란 간한하게 데이터 클래스 

View 란 화면에서 보여지는 부분입니다.


ViewModel은 이런 과거에 서로 엉켜있던 결합도를 줄이고 단방향으로 제공하게됩니다.


Data

View  ->  ViewModel  -> Model 


notify

Model ->  ViewModel  -> View





저는 여기서 MVVM에 대한 내용이 아닌 제가 블로그를 보다가 착각하는 부분이 생겨 알려드리고자 합니다.


Google acc에서 제공하는 ViewModel을 이용하여


우리는 액티비티와 ViewModel의 라이프 사이클을 관리하게 됩니다.



예를들어 우리가 startActivity를 이용할때 


ViewModel에서 이용하게 된다면



val intent = Intent(context, FixedActivity::class.java)
context?.startActivity(intent)

이런 코드 혹은 


view.getContext 를 이용해서 하게되는데




ViewModel 사용 시 ViewModel에 액티비티, 프래그먼트, 뷰에 대한 컨텍스트를 저장해서는 안됩니다. 액티비티가 재생성 될 때, ViewModel은 액티비티 수명주기 외부에 존재하기 때문에 UI 컨텍스트를 ViewModel에 저장한다면 메모리 릭을 발생시키는 직접적인 원인이 될 수 있습니다.


출처 : https://medium.com/@jungil.han/%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-viewmodel-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-2e4d136d28d2



이런글을 보게되었고, 액티비티내에서 데이터 바인딩을 이용해서 하는 방법이나 singleLiveEvent 를 통해 개발이 가능할 것 같습니다





출처 : https://kaidroid.me/post/android-livedata-with-transformation-and-mediatorlivedata/