LiveData의 UI 상태 복원 방법은?

_____
Q1: LiveData를 사용 중인 UI의 상태를 어떻게 복원할 수 있나요?
A1: LiveData는 Lifecycle을 인지하여 UI 데이터의 관찰과 업데이트를 자동으로 처리하지만, 화면 회전이나 프로세스 종료 시 저장된 상태를 복원하려면 별도의 상태 저장 로직이 필요합니다. 일반적으로 ViewModel과 SavedStateHandle 또는 `onSaveInstanceState`와 결합하여 상태를 저장하고 복원합니다.

---

Q2: ViewModel과 LiveData를 사용하여 UI 상태를 어떻게 저장하고 복원하나요?
A2:
1. UI 상태를 ViewModel 내 LiveData 변수로 관리합니다.
2. 화면 회전 시 ViewModel은 그대로 유지되어 LiveData 값도 유지됩니다.
3. 그러나 프로세스 종료 후 복원은 직접 구현이 필요해 SavedStateHandle을 사용합니다.
4. SavedStateHandle은 ViewModel 생성 시 전달되어, 여기서 저장된 상태를 LiveData로 제공하거나 초기화할 수 있습니다.
5. 프로세스 종료 후 ViewModel 재생성 시 SavedStateHandle에서 저장된 값을 불러와 LiveData에 세팅하여 UI 상태를 복원할 수 있습니다.

---

Q3: SavedStateHandle이란 무엇이며 어떻게 사용하나요?
A3: SavedStateHandle은 ViewModel에 상태 저장 및 복원을 쉽게 처리하는 키-값 저장소입니다. ViewModel 생성자에서 받아 사용하며, 내부적으로 `onSaveInstanceState`와 유사한 역할을 합니다. 예:
```kotlin
class MyViewModel(private val state: SavedStateHandle): ViewModel() {
val inputText: MutableLiveData = state.getLiveData("inputText")

fun saveInput(text: String) {
state["inputText"] = text
}
}
```
화면 회전이나 프로세스 종료 후 재생성 시 SavedStateHandle에 저장된 값을 자동으로 복원하여 LiveData에 노출합니다.

---

Q4: onSaveInstanceState와 LiveData를 함께 사용하는 방법은?
A4: LiveData 값 자체는 자동으로 상태를 저장하지 않으므로 `onSaveInstanceState`에서 필요한 데이터를 Bundle에 저장하고, Activity/Fragment 재생성 시 이 데이터를 ViewModel에 전달하여 LiveData에 설정합니다. 하지만 SavedStateHandle을 사용하면 더 편리합니다.

---

Q5: LiveData 상태를 복원하는 주된 방법은 무엇인가요?
A5:
- 화면 회전: ViewModel이 유지되어 LiveData 데이터가 계속 유지됨. 별도 저장 필요 없음.
- 프로세스 종료 후 복원: SavedStateHandle 활용 또는 onSaveInstanceState에 필요한 데이터를 저장후 재설정 필요.
- 데이터 영속성이 필요한 경우 Room, Preferences 등 별도 저장소와 연동 필요.

---

Q6: LiveData 상태 복원 시 주의할 점은?
A6:
- LiveData는 UI 상태 자체를 자동 저장하지 않음. 꼭 ViewModel 및 상태 저장 수단과 함께 사용해야 함.
- 복원 시 정확한 키로 상태를 저장하고 불러와야 함.
- UI 상태 중 민감하거나 큰 데이터는 별도의 영속 저장소를 사용하는 것이 좋음.

---

요약: LiveData는 Lifecycle에 민감한 데이터 업데이트를 담당하며, 화면 회전 시 ViewModel 단위로 상태가 유지됩니다. 그러나 프로세스 종료 시 UI 상태 복원을 위해 SavedStateHandle과 같은 상태 저장 도구를 활용해야 하며, 필요에 따라 onSaveInstanceState나 영속 저장소와 결합해 완전한 상태 복원을 구현합니다.
LiveData를 사용한 UI 상태 복원은 안드로이드 애플리케이션 개발에서 중요한 부분입니다.

Activity나 Fragment가 재생성될 때 UI 상태를 적절히 복원하지 않으면 사용자 경험이 저하될 수 있습니다.

다음은 LiveData를 활용하여 UI 상태를 복원하는 방법에 대해 자세히 설명합니다.

1. ViewModel과 LiveData의 역할 이해하기 ViewModel은 Activity나 Fragment의 라이프사이클을 초월하여 데이터를 관리합니다.

LiveData는 관찰 가능한 데이터 홀더로서, UI 컨트롤러(주로 Activity나 Fragment)가 데이터를 옵저빙하여 변경사항이 있을 때 UI를 자동으로 업데이트합니다.

따라서, UI 상태를 LiveData와 ViewModel에 저장하면 라이프사이클 변화에도 상태가 유지됩니다.



2. UI 상태를 ViewModel에 저장하기 UI 상태(예: 입력된 텍스트, 현재 선택된 탭, 체크박스 상태 등)를 ViewModel 내의 LiveData 변수로 관리합니다.

예를 들어, 사용자가 입력한 내용을 MutableLiveData으로 관리하여 변화를 추적할 수 있습니다.



3. UI 컴포넌트와 LiveData 연결 Fragment나 Activity 내에서 LiveData를 관찰(observer)하도록 설정합니다.

LiveData의 값이 변경되면 자동으로 콜백이 호출되므로 별도의 UI 업데이트 코드가 간단해집니다.

이렇게 하면 사용자가 입력한 내용 같은 상태가 변경될 때마다 ViewModel에 저장되고, 재생성 시에도 해당 상태가 그대로 유지됩니다.



4. UI 상태 자동 복원 시스템이 Activity나 Fragment를 재생성하는 경우 ViewModel은 동일 인스턴스를 유지하므로 LiveData 안의 값도 변하지 않습니다.

따라서 UI가 다시 그려질 때 LiveData의 현재 값이 UI에 자동으로 반영됩니다.

코드에서는 onCreate나 onViewCreated에서 LiveData를 옵저빙하면서 UI 컴포넌트를 초기화하도록 합니다.



5. SavedStateHandle 사용하기 (고급) ViewModel을 생성할 때 `SavedStateHandle`을 함께 사용하면 프로세스 강제 종료 같은 심각한 상황에서도 상태 저장이 가능합니다.

`SavedStateHandle`은 Bundle 기반으로 상태를 저장하므로 앱 프로세스가 완전히 죽어도 복원이 가능합니다.

이를 ViewModel에 주입한 후, LiveData로 wrapping하여 관리하면 더욱 안전하게 UI 상태를 복원할 수 있습니다.



6. 예외처리 및 주의사항 - LiveData의 단일 값만 저장 가능하므로 복잡한 상태는 데이터 클래스 등으로 묶어서 관리하는 것이 좋습니다.

- 단순 UI 상태 외에 화면 회전이나 재구성 시점에 손실되어서는 안 되는 데이터는 SavedStateHandle을 함께 활용하는 것이 권장됩니다.

- LiveData 관찰 시 라이프사이클에 맞게 관찰하도록 하여 메모리 누수를 방지해야 합니다.

요약 : LiveData는 ViewModel과 함께 UI 상태를 관리하는데 매우 적합합니다.

UI 상태를 LiveData로 관리하고, Activity나 Fragment는 ViewModel의 LiveData를 옵저빙하여 상태 변화에 반응하면, 화면 재생성 때도 자동으로 UI 상태가 복원됩니다.

더 나아가 SavedStateHandle을 이용하면 프로세스 종료 상황에서도 상태 복원이 가능합니다.

이러한 구조는 안정적이고 유지보수하기 쉬운 UI 상태 복원을 가능하게 합니다.

작성자: 박채연 [비회원] | 작성일자: 1년 전 2025-05-25 12:41:13
조회수: 197 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.