[Flutter] Riverpod vs Provider, Flutter 상태관리의 진화

서연·2025년 10월 1일
post-thumbnail

📖 Riverpod 상태관리와 provider 상태관리의 차이

🏗️ BuildContext 의존성

🟡 Provider

  • 상태를 읽으려면 Context.read 또는 Context.watch가 필요하다.
  • 위젯 트리에 강하게 의존한다.

🟢 Riverpod

  • ref.read, ref.watch 사용한다.
  • BuildContext에 의존하지 않아 ViewModel, Service 등 위젯 밖 계층에서도 사용 가능하다.

📦 선언 및 구조

🟡 Provider

  • ChangeNotifierProvider, Provider 등을 위젯 트리에 직접 감싸서 등록해야 하며 선언 위치에 따라 접근 범위를 제한한다.

🟢 Riverpod

  • Provider를 전역 변수처럼 선언 가능하다.
  • 앱 전체를 ProviderScope으로 한 번만 감싸면 돼서 MultiProvider가 불필요하다.

🔗 의존성 주입 & 조합

🟡 Provider

  • 다른 Provider 참조가 복잡하다.
  • 의존 관계 관리가 불편하다.

🟢 Riverpod

  • ref.watch(otherProvider)로 명시적 의존성을 선언한다.
  • 참조 Provider 변경 시 자동 빌드 반영한다.
  • 다양한 Provider 타입을 제공한다.

⚠️ 에러처리

🟡 Provider

  • 잘못된 접근 시 런타임 오류 발생 가능하다.

🟢 Riverpod

  • 컴파일 시점에서 오류 감지가 가능하여 안정성이 높아진다.

🗑️ 메모리 관리

🟡 Provider

  • 자동 dispose 부족하여 개발자가 직접 메모리 해제 관리가 필요하다.

🟢 Riverpod

  • 사용하지 않는 Providerdispose로 자동 해제 되어 메모리 누수가 감소된다.

🧪 테스트 용이성

🟡 Provider

  • 반드시 위젯 트리에 감싸고 테스트를 해야 해서 번거롭다.

🟢 Riverpod

  • ProviderOverride 기능을 지원한다.
  • 단위 테스트가 편리하다.
  • BuildContext 의존 없어 UI 없이 로직만 테스트 가능하다.

📊 규모 적합성

🟡 Provider

  • 단순 구조로 소규모 애플리케이션에 적합하다.

🟢 Riverpod

  • 복잡한 상태 종속성 관리와 의존성 주입에 강점이다.
  • 대규모 애플리케이션에 적합하다.

0개의 댓글