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.10.28 |
---|---|
Flutter 개발 중 발생할 수 있는 에러 정리 (0) | 2024.06.19 |
강의 내용 정리 - [Flutter로 SNS 앱 만들기] (0) | 2024.05.03 |