자주 사용하는 아키텍쳐 패턴이 여러가지가 있다.
MVC: 역할에 따라 구분해서 프로그램을 나눠보자
MVP: 화면과 로직을 분리하자 (그래야 유닛테스트를 할 수 있지)
MVVM: 화면알아서 그리렴. 나는 데이터만 바꿀테니.
뷰모델이란??
ViewModel 클래스는 수명 주기를 고려하여 UI 관련 데이터를 저장하고 관리하도록 설계되었습니다.
ViewModel 클래스를 사용하면 화면 회전과 같이 구성을 변경할 때도 데이터를 유지할 수 있습니다.
** 뷰모델이란 UI의 변경이나 Activity의 생명주기에 관계없이 데이터를 보존해주는 클래스!
뷰모델이 왜필요한가??
기본적으로 Activity에 데이터를 보관할 경우 화면을 회전하면 destory -> create 되기때문에 데이터가 초기화된다.
Activity 가 종료되는경우
1. 사용자가 ‘뒤로 가기(Back)’ 버튼을 눌러 Activity를 종료한 경우
2. Activity가 백그라운드에 있을 때 시스템 메모리가 부족해진 경우(OS가 강제 종료시킴)
3. 언어 설정을 변경할 때
4. 화면을 가로/세로 회전할 때
5. 폰트 크기나 폰트를 변경했을 때
하지만 실제 개발할때는 그렇지 않았는데...
=> 이는 우리가 onSaveInstanceState()를 활용해서 데이터를 Bundle에 보관하고 있었기 때문
onSaveInstanceState() 콜백은 시스템이 활동 또는 프래그먼트와 같은 UI 컨트롤러를 폐기하고 나중에 다시 생성할 때 컨트롤러의 상태를 다시 로드하는 데 필요한 데이터를 저장합니다.
* 화면회전시 생명주기
onPause() → onSaveInstanceState() → onStop() → onDestory() → onCreate() → onStart() → onResume()
하지만 onSaveInstanceState 만으로 해결하기에 문제가많다..
담을수있는 데이터의 형태가 한정적이고, UI가 느려진다, 공식문서에서도 50k미만의 데이터를 권장하고 있다.
이래서 등장한게 뷰모델...!!
** 뷰모델은 Activtiy, Fragment의 생명주기와 독립적이고, 데이터 공유에도 용이하다
(Activity가 onCreate될때 생겨서.. onDestory 될때까지 살아있다.)
*뷰모델 예제. 프래그먼트 간에 데이터 공유를 뷰모델로 해보자..!! (추후에..)
*주의사항
Context, Activity, Fragment 를 참조하면 안된다.
-> Memory Leak 발생
참고
https://github.com/iamchiwon/RxSwift_In_4_Hours
https://www.youtube.com/watch?v=M58LqynqQHc&t=1426s
https://snowdeer.github.io/android/2017/08/16/android-on-save-instance-state/
https://www.linkedin.com/pulse/android-onsaveinstancestate-bundle-secret-safe-daniel-pietsch/
'Android' 카테고리의 다른 글
[안드로이드] 참고한 좋은사이트들 (0) | 2022.01.20 |
---|---|
[안드로이드] 얄팍한 지식을 정리해보자 (0) | 2022.01.15 |
[안드로이드] 리사이클러뷰를 만들어보자 (0) | 2022.01.14 |
[안드로이드] Room 라이브러리를 사용해보자 (0) | 2022.01.09 |