ABOUT ME

-

  • Android) AAC - ViewModel 예제
    Android 2020. 8. 4. 15:42
    ViewModel

    우선 MVVM 패턴의 ViewModel과는 다른 개념입니다.
    MVVM의 ViewModel은 마이크로소프트에서 처음 발표했는데, 모델과 뷰 사이의 데이터를 관리하고 바인딩 해주는 역할을 합니다.


    구글에서 발표한 AAC(Android Architecture Component)의 ViewModel은 아래 사진과 같이 액티비티의 생명주기에 분리시켜
    ViewModel Scope의 생명주기를 따릅니다. Activity 재생성, Rotation 같은 Configuration 변경에 영향을 받지 않습니다. 
    ViewModel은 View에 대해서 알지 못하며 UI에 독립적이라고 볼 수 있습니다. 그래서 액티비티가 재실행되어도 데이터가 소멸되지 않습니다. 

    가장 좋은 예제로 안드로이드의 상태 변경의 예제를 살펴보겠습니다. 액티비티의 생명주기를 따를시에는 화면 회전시에 액티비티가 재실행 됨으로써 데이터가 날라가게 됩니다. 이를 해결하기 위해 onPause() 또는 onResume()에 저장해줘야 하는 번거로움이 있습니다.

     


    ViewModel 예제 

     

    ViewModel()을 상속받는 뷰모델을 하나 만들어줍니다. 초시계를 이용해 화면 회전시에 데이터가 유지되는지 확인 하려고 합니다.

     

     

    Activity의 코드는 아래와 같습니다.

     

     

    뷰모델을 ViewModelProvider라는 helper객체를 이용하여 생성해줍니다.

     

    예전 코드들을 보면 ViewModelProvieders.of(this).get(~~) 이런식으로 코들를 작성했는데

    ViewModelProviders는 deprecated 됐으므로 ViewModelProvider를 사용해주면 됩니다.

     

     

    (실행 화면)

     

    위와 같이 안드로이드의 생명주기에 분리되어 ViewModel의 Scope를 따르기 때문에 화면 회전에도 데이터가 날라가지 않고 유지 됩니다.

     


     

    간혹 ViewModel 에서 context activity객체를 사용하고 싶다면 아래 처럼 AndroidViewModel() 사용해야 합니다.

     

     

    • ViewModel() , AndroidViewModel() 차이점 - Application 유무, 이것을 상속받으면 메모리 누수 발생가능. 일반적으로 developer에서 ViewModel() 쓰도록 권장하고 있다.
    반응형

    댓글

Designed by Me.