https://velog.io/@haero_kim/Android-깔쌈하게-MVVM-패턴과-AAC-알아보기
https://developer.android.com/jetpack/guide?hl=ko#recommended-app-arch
https://haruple.tistory.com/212
https://magi82.github.io/android-mvc-mvp-mvvm/
https://blog.yena.io/studynote/2019/03/16/Android-MVVM-AAC-1.html
https://blog.yena.io/studynote/2019/03/27/Android-MVVM-AAC-2.html <- 연습예제
https://developer.android.com/topic/architecture
https://developer.android.com/reference/androidx/lifecycle/ViewModel?hl=ko
ACC: https://youtu.be/BofWWZE1wts


  • MVVM
    • Model-View-View Model

      • Model : 데이터 처리
        -> 요청받은 data를 반환

      • View : 사용자에게 보여지는 UI이자 사용자input을 받음.
        -> Activity, Fragment
        -> Button 터치, text 입력 등
        -> LiveData를 통해 ViewModel의 data 변경 시 UI 자동 갱신 수행

      • ViewModel : View에 바인딩되어 Model과 View 사이의 communication 역할
        일종의 View를 위한 model

  • 목표 :
    화면을 그리는 로직과 화면을 그리기 위한 데이터를 처리하는 로직을 분리

  • 처리절차:
    • input(사용자 입력)을 View에서 받는다.

    • View에 사용자 input 들어옴 -> View는 ViewModel에게 input에 따른 data 요청하고 ViewModel의 data가 변경되는지 관찰 -> ViewModel이 input 작업을 수행하는데 필요한 data를 Model에 요청 -> Model이 특정 data를 ViewModel로 전달 -> ViewModel에서는 Model로부터 전달 받은 data를 가공 및 저장 -> ViewModel의 data 변경 -> ViewModel의 data 변경 시 DataBinding으로 View가 ViewModel을 관찰하고 있으므로 ViewModel이 View에게 따로 명령을 보내지 않아도 View 자동 갱신

  • 각 파트들에 해당하는 components
    • View Part:
      UI에서 Observer를 가지고 사용자 event를 감지하며 data를 화면에 display

    • ViewModel Part:
      LiveData를 이용해 UI에 필요한 모든 데이터를 Hold(보관유지)함

    • Model Part :
      -> Repository, RoomDatabase(Entity, DAO, Room)

  • ViewModel은 일종의 View를 위한 Model 즉, View는 ViewModel이 가지고 있는 data를 통해 UI를 그린다. -> View는 ViewModel를 observe하며 data 변경 여부를 파악해야 함.

  • 로직을 분리함으로써 View는 DB에 접근하는 역할을 배제하고 ViewModel과의 상호작용에만 처리하면 됨.

  • ViewModel을 통해 data를 참조 -> Activity, fragment의 Lifecycle를 따르지 않음.

  • configuration 변경(화면 전환, Activity 꺼짐 등) 시에도 ViewModel이 data를 Hold하고 있기에(data를 지속적으로 가지고 있기에) View 재구성이 원활

  • View에서 ViewModel의 LiveData를 observe하며 data 변경 시 자동으로 View 갱신

  • LiveData를 통해 View가 ViewModel을 관찰하게 로직을 짠다면, LiveData는 Activity, Fragment의 lifecycle을 인지하기에 View(화면)가 종료되거나 꺼지거나 비활성화되면 동작하지 않기에 메모리 누수를 줄일 수 있음. (LiveData는 View가 ViewModel 관찰 시, 그 관찰 대상이 되는 data holder class)

  • Repository class는 로컬DB, API서버에서 data를 가져와 저장하고 ViewModel과 이러한 data를 주고 받음. -> ViewModel은 DB or API서버에 직접 Access하는 것이 아닌 Repository로부터 data를 가져옴 -> ViewModel 자체는 data처리에 관한 신경을 쓸 필요가 없게 됨.

profile
https://github.com/nohjunh

0개의 댓글