Provider와 Riverpod

2024. 10. 11. 01:26·Dart와 Flutter
24년 10월을 기준으로 작성된 글입니다.

 

 

 

Riverpod 상태관리 패키지는 기존 Provider 패키지의 단점을 보완하고

더 강력하고 유연한 상태 관리 솔루션을 제공하기 위해 동일한 개발자인 Rémi Rousselet에 의해 개발되었다.

 

1. BuildContext에 의존하지 않는 설계

기존 Provider 패키지의 한계점

  • Provider는 위젯 트리에 접근하기 위해 BuildContext를 사용한다. 이는 위젯 트리 외부에서 상태에 접근하거나, 비동기 코드에서 상태를 사용하고자 할 때 제약이 발생한다.
  • 위젯 재구성 과정에서 BuildContext의 유효성이 변경될 수 있어, 예상치 못한 에러가 발생할 수 있다.

Riverpod 패키지의 개선점

  • Riverpod는 BuildContext에 의존하지 않는다. 상태는 위젯 트리와 분리되어 있으며, 어디서든 자유롭게 접근 가능하다.
  • 이는 테스트 작성 시에도 유용하며, 상태를 독립적으로 관리하고자 할 때 큰 이점을 제공한다.

2. 전역적이며 안정적인 상태 관리

기존 Provider 패키지의 한계점

  • Provider는 상태를 제공하기 위해 위젯 트리에 반드시 포함되어야 한다. 이는 상태의 범위를 제한하고, 전역적인 상태 관리에 어려움을 준다.
  • 상태를 공유하기 위해 위젯 트리 상에서 올바른 위치에 Provider를 배치해야 하며, 이는 복잡한 앱에서 관리가 어려울 수 있다.

Riverpod 패키지의 개선점

  • Riverpod는 프로바이더를 전역적으로 선언하고 관리할 수 있다.
  • 상태는 위젯 트리와 분리되어 있으므로, 앱 어디에서나 동일한 상태에 접근할 수 있다.
  • 이는 코드 구조를 단순화하고, 상태 관리의 일관성을 높여준다.

3. 더 강력한 의존성 주입과 상태 관리

기존 Provider 패키지의 한계점

  • Provider에서 의존성 주입은 상대적으로 제한적이며, 복잡한 의존성 그래프를 관리하기 어려울 수 있다.
  • 상태 간의 의존성을 명시적으로 표현하기 어렵다.

Riverpod 패키지의 개선점

  • Riverpod는 프로바이더 간의 의존성을 명시적으로 선언할 수 있다. 이를 통해 상태 간의 관계를 명확하게 표현하고 관리할 수 있다.
  • Provider 외에도 StateNotifierProvider, FutureProvider, StreamProvider, ChangeNotifierProvider 등 다양한 프로바이더 타입을 제공하여 다양한 상태 관리 패턴을 지원한다.
  • family와 autoDispose 등의 기능을 통해 프로바이더를 매개변수화하거나 자동으로 자원을 해제할 수 있다.

4. 향상된 성능과 메모리 관리

기존 Provider 패키지의 한계점

  • Provider는 필요하지 않은 상태도 메모리에 유지할 수 있으며, 이는 곧 메모리 낭비로 이어졌다.
  • 상태의 수명 주기를 세밀하게 관리하기 어렵다.

Riverpod 패키지의 개선점

  • Riverpod는 autoDispose 기능을 통해 사용되지 않는 상태를 자동으로 폐기하여 메모리 효율성을 높인다.
  • 프로바이더의 수명 주기를 명확하게 설정할 수 있어 성능 최적화에 유리하다.

5. 향상된 개발자 경험

기존 Provider 패키지의 한계점

  • Provider 사용 시 코드의 가독성과 유지보수가 어려워질 수 있다.
  • 컴파일 타임에 오류를 감지하기 어렵고, 런타임 에러로 이어질 수 있다.

Riverpod 패키지의 개선점

  • Riverpod는 강력한 타입 분석과 호환되어, 컴파일 타임에 오류를 더 잘 감지할 수 있다.
  • 프로바이더를 전역 변수로 선언하고 사용하므로, 코드의 가독성이 향상된다.
  • IDE의 자동 완성 기능과 더욱 잘 통합되어 개발 생산성을 높인다.

6. 테스트 용이성

기존 Provider 패키지의 한계점

  • BuildContext에 의존하므로, 위젯 테스트 없이 로직을 단위 테스트하기 어렵다.
  • 상태를 Mocking하거나 대체하기 위한 추가 작업이 필요하다.

Riverpod 패키지의 개선점

  • 상태와 로직이 위젯 트리와 분리되어 있어, 단위 테스트가 용이하다.
  • 프로바이더를 쉽게 Mocking하거나 오버라이드할 수 있어, 다양한 테스트 시나리오를 구현할 수 있다.

7. 동시성 및 비동기 작업 지원

기존 Provider 패키지의 한계점

  • 비동기 상태 관리에 제한이 있으며, Future나 Stream을 처리하기 위해 추가적인 코드가 필요하다.

Riverpod 패키지의 개선점

  • FutureProvider, StreamProvider 등을 통해 비동기 작업을 간단하게 관리할 수 있다.
  • 상태의 변경에 따른 재빌드와 업데이트가 자동으로 처리된다.

8. Hooks와의 통합

  • Riverpod는 flutter_hooks 패키지와 자연스럽게 통합되어, Hook 기반의 코드를 더욱 효율적으로 작성할 수 있다.
  • 이 Hooks를 사용하여, 상태 관리 로직을 재사용 가능하고 간결하게 작성할 수 있다.

 

 

 

'Dart와 Flutter' 카테고리의 다른 글

Flutter 소소한 팁  (0) 2024.11.27
강의 내용 정리 - [Flutter로 메신저 앱 만들기]  (0) 2024.10.28
Flutter 개발 중 발생할 수 있는 에러 정리  (0) 2024.06.19
강의 내용 정리 - [Flutter로 SNS 앱 만들기]  (0) 2024.05.03
'Dart와 Flutter' 카테고리의 다른 글
  • Flutter 소소한 팁
  • 강의 내용 정리 - [Flutter로 메신저 앱 만들기]
  • Flutter 개발 중 발생할 수 있는 에러 정리
  • 강의 내용 정리 - [Flutter로 SNS 앱 만들기]
달거달거
달거달거
개발자를 꿈꿉니다
  • 달거달거
    SWEE IT
    달거달거
  • 전체
    오늘
    어제
    • 분류 전체보기 (288)
      • 개발 환경 (5)
        • VSCode (1)
        • 파이썬 (Anaconda) (1)
        • Git (1)
        • Flutter (0)
        • Kotlin (1)
      • Spring (5)
        • 스프링 부트와 JPA 실무 완전 정복 로드맵 (2)
        • 스프링 부트와 AWS로 구현하는 웹 서비스 (1)
        • 채쌤의 스프링 부트 프로젝트 (1)
      • 알고리즘과 코딩 테스트 (16)
        • 파이썬 문법 (2)
        • 백준 25단계 (10)
        • 프로그래머스 코딩 테스트 고득점 Kit (1)
        • 코틀린 문법 (1)
      • 요리 (236)
      • 데이터베이스 (2)
        • MySQL (2)
      • 안드로이드 (11)
        • 연습 코드 (6)
        • 도서 내용 정리 (4)
      • Dart와 Flutter (12)
        • 도서 내용 정리 (4)
        • Flutter 위젯 정리 (1)
        • 15개 프로젝트 (2)
      • 피그마 (0)
        • 도서 내용 정리 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    spring
    프로그래머스
    아나콘다
    docker
    DART
    node.js
    알고리즘
    티스토리챌린지
    git
    AWS
    백준
    문법
    자취요리
    c++
    코딩 테스트
    코틀린
    파이썬
    vscode
    C
    mysql
    머신러닝
    피그마
    데이터베이스
    주석
    JPA
    안드로이드
    오블완
    Flutter
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
달거달거
Provider와 Riverpod
상단으로

티스토리툴바