📌 UI 상태를 어떻게 저장해야 할까?
안드로이드 공식 문서에 따르면 몇 가지 방법을 알려줍니다.
- 로컬 저장소 사용(SharedPreference, DataStore, Room)
- ViewModel 사용
- Saved instance states
1. Compose: rememberSaveable
2. View: onSaveInstanceState() API
3. ViewModel: SavedStateHandle
이렇게 안드로이드에서는 앱의 안정성을 높이기 위해 상태를 저장할 수 있는 방법을 제공합니다.
그럼 이걸 어떻게 써야 할지 알아보도록 하겠습니다.
📌 어떤 방법으로 저장을 해야 할까?
방법은 크게 3가지로 나뉘는데 상태를 유지한다
는 관점은 동일하지만 언제 사용하고 데이터를 담아야 하는지 차이점을 구분해 보겠습니다.

ViewModel
- Activity나 Fragment가 재생성이 돼도 ViewModel의 생명주기는 살아있어 데이터가 유지됩니다.
finish()
가 호출되면 시스템에 의해 데이터가 사라짐 ->프로세스 종료가 되면 데이터가 사라집니다.

SavedStateHandle
- 안드로이드에서 메모리 확보를 위해 앱 프로세스를 종료시키는데 ViewModel만 사용하면 데이터가 유지가 안 되는데 프로세스가 종료된 후 데이터를 다시 로드하려면 SavedStateHandle API와 함께 사용하면 됩니다.
Bundle
을 사용하여 프로세스 종료 후에도 데이터를 복원이 됩니다.
onSaveInstanceState
- Configuration change가 발생할 때
Bundle
에 데이터 또는 상태를 저장합니다.
- 간단한 데이터를 저장하는 데 사용합니다. 스크롤 위치 유지할 때 주로 사용합니다.
로컬 저장소
- SharedPreference, DataStore, Room등이 입니다.
- 주로 앱 내에 데이터를 영구적으로 저장하는 공간입니다.
- 복잡하거나 큰 데이터의 프로세스 종료 처리하는데 사용이 됩니다.
- 애플리케이션이 사용자의 기기에 설치되어 있는 동안 유지됩니다, 단 사용자가 앱 데이터를 삭제하지 않는다는 가정에서요.
- 하지만 공식 문서에 따르면 UI 상태 저장은 ViewModel,onSaveInstanceState 와 같이 일시적으로 상태와 데이터를 저장하는 것이 Configuration change가 일어날 때 짧은 시간 동안 UI를 유지하는 데 적합하지만
로컬 데이터와 같은 영구적으로 데이터를 기기에 저장하는 것은 데이터를 검색하는 데 비용이 많이 들어 적합하지 않다
고 합니다.
📌 참고 자료
UI 상태 저장 공식문서
구성 변경 처리 공식문서
Configuration change + Multiple screen size 대응 시 키워드 정리
[Android] 안드로이드의 UI 상태 저장, onSaveInstanceState
UI 상태 관리를 할 때 어떤 것들을 고려할 수 있을까