Riverpod LifeCycle 2

koonlx·2025년 6월 12일

riverpod

목록 보기
3/4
post-thumbnail

1. 생명주기 흐름도 (시각화)

Uninitialized
    |
    V  (watch/read/listen 시)
Alive
    |
    | (UI에서 참조 끊김)
    +--> Paused  (Provider 기본)
    |      |
    |      V (참조 복귀 시)
    |    Alive
    |
    | (AutoDispose 적용 시 참조 끊김)
    +--> Disposed  (메모리 해제)

해석:
기본 Provider:
참조 끊겨도 Paused 상태 → 메모리에 유지됨 → 이후 참조 복귀 시 Alive로 복귀.
AutoDisposeProvider:
참조 끊기면 바로 Disposed → 메모리 해제 → 이후 참조 시 다시 build 실행됨.

2. Provider 종류별 생명주기 차이

Provider 종류Alive → Paused 지원 여부Alive → Disposed 지원 여부메모리 유지 여부
Provider✅ 지원❌ 지원 안 함유지됨 (Paused 시 유지)
AutoDisposeProvider❌ 지원 안 함✅ 바로 Disposed유지 안 됨
StateProvider유지됨
StateNotifierProvider유지됨
AutoDisposeStateProvider유지 안 됨
AutoDisposeStateNotifierProvider유지 안 됨

정리:

AutoDispose 붙으면 → 참조 끊기면 바로 Disposed → 재사용 시 재생성 비용 있음 (주의 필요).
Provider 기본은 → 참조 끊겨도 Paused → 이후 빠른 복귀 가능.

3. 실전에서 언제 autoDispose를 써야 하나?

AutoDispose 적극 추천 상황:

  • 화면 전용 ViewModel / StateNotifier
    • 특정 화면에서만 쓰이는 상태
      화면 전환 시 메모리 정리 필요
final myPageViewModelProvider = AutoDisposeStateNotifierProvider<MyPageViewModel, MyPageState>((ref) {
  return MyPageViewModel();
});
  • StreamProvider 또는 heavy resource Provider
    • Stream 구독, DB 연결 등 → 사용 안 하면 자원 해제 필요
final myStreamProvider = AutoDisposeStreamProvider<int>((ref) {
  return someHeavyStream();
});
  • 단발성 로딩 상태
    • 한 번만 필요하고 이후 유지할 필요 없는 데이터

AutoDispose를 쓰면 안 되는 경우:

  • 🚫 전역 서비스 Provider
    • GoRouter Provider
    • AppThemeProvider
    • PreferencesServiceProvider
    • AuthServiceProvider
      → 이런 경우 AutoDispose 쓰면 → 화면 전환 시 서비스 해제됐다가 다시 초기화 → 원치 않는 side effect 발생 가능.
final preferencesServiceProvider = Provider<PreferencesService>((ref) {
  final prefs = ref.watch(sharedPreferencesProvider).requireValue;
  return PreferencesService(prefs);
});

✅ 최종 실전 패턴 요약

사용 케이스Provider 추천 종류
화면 전용 ViewModelAutoDisposeStateNotifierProvider
화면 단기 상태AutoDisposeStateProvider
전역 서비스 (router, auth, theme 등)Provider
전역 상태 공유 (user profile 등)Provider 또는 StateNotifierProvider
Stream / DB 리소스 heavy ProviderAutoDisposeStreamProvider

⭐ 핵심 정리 문장

"화면 전용 상태/리소스는 AutoDisposeProvider로 관리하고, 앱 전역 상태/서비스는 일반 Provider로 관리하라 — 이 패턴이 유지보수성과 성능을 모두 확보하는 실전 Best Practice다."

profile
Server Developer

0개의 댓글