1. RiverPod
리버팟(RiverPod)은 Flutter 및 Dart 환경에서 상태 관리를 위한 라이브러리입니다. 리액티브 프로그래밍 패러다임을 따르며, 앱의 상태를 더 안전하고 간결하게 관리할 수 있도록 도와줍니다. RiverPod는 Flutter의 기존 상태 관리 도구인 Provider에서 개선된 점을 여러 가지 포함하고 있습니다. 특히, 글로벌 상태 공유를 더 직관적으로 처리할 수 있고, 테스트하기 쉬운 구조를 제공합니다.
리버팟의 주요 특징:
- 안전한 상태 관리: RiverPod는 상태를 안전하게 다룰 수 있도록 설계되어, Provider에서 흔히 발생하는 전역 상태의 혼란을 방지합니다.
- 독립적 상태 관리: RiverPod는 Flutter 프레임워크에 의존하지 않기 때문에, 더 독립적인 상태 관리를 할 수 있고, UI와 비즈니스 로직을 완벽하게 분리할 수 있습니다.
- 테스트 용이성: 상태 로직이 UI에서 분리되어 있기 때문에, 테스트가 간편합니다.
- 디버깅 및 성능 최적화: 상태가 언제 어디서 변경되는지 추적하는 것이 쉬워서 디버깅이 용이하며, 필요할 때만 상태를 갱신하는 등의 성능 최적화가 가능합니다.
RiverPod의 구성 요소
- Provider: 상태를 제공하는 가장 기본적인 구성 요소입니다.
- StateProvider: 상태를 읽고, 쓰고 변경할 수 있는 상태 관리 도구입니다.
- FutureProvider: 비동기 상태를 관리하는 데 사용되며, Future 작업 결과를 제공합니다.
- StreamProvider: 스트림 데이터와 관련된 상태를 관리하는 데 유용합니다.
- StateNotifierProvider: 더 복잡한 상태 관리를 필요로 하는 경우 사용할 수 있는 Provider입니다.
리버팟은 Provider의 단점을 보완하여 더 견고하고 테스트하기 쉬운 상태 관리 도구로 많이 사용되고 있습니다. 프로젝트에서 사용할 때 유용하게 적용할 수 있을 것입니다.
- 리버팟 사용법!

터미널에 입력하면 편하게 들어간다.
- 플러그인 들어가서 riverpod snippets 다운하기

2. Redux
Redux
Redux는 주로 React 애플리케이션에서 사용되지만, Flutter에서도 사용할 수 있는 상태 관리 패턴입니다. Redux는 단일 전역 상태 저장소를 기반으로 상태를 관리하며, 상태는 오직 액션과 리듀서를 통해서만 변경될 수 있습니다.
Redux의 주요 개념:
- Store: 애플리케이션의 모든 상태를 저장하는 중앙 저장소입니다.
- Action: 상태를 변경하기 위한 명령을 의미하며, 상태 변경을 나타내는 단순한 객체입니다.
- Reducer: 상태를 변경하는 함수로, 현재 상태와 액션을 받아서 새로운 상태를 반환합니다.
- Dispatch: 액션을 스토어에 보내서 상태 변화를 요청하는 함수입니다.
Redux의 흐름:
- 애플리케이션에서 Action을 dispatch하고, 이 액션은 Reducer를 통해 처리됩니다.
- Reducer는 상태를 변경하고, Store는 새로운 상태를 UI에 반영합니다.
Redux의 장단점:
- 장점:
- 상태를 예측 가능하게 관리할 수 있습니다.
- 전역적으로 상태를 관리할 수 있어 복잡한 애플리케이션에서 유용합니다.
- 미들웨어를 통해 비동기 작업을 관리할 수 있습니다.
- 단점:
- 코드가 장황해질 수 있으며, 보일러플레이트 코드가 많이 필요합니다.
- 작은 상태 변경을 위해 많은 양의 코드가 필요할 수 있습니다.
Bloc 패턴
Bloc 패턴
Bloc (Business Logic Component) 패턴은 주로 Flutter에서 사용되는 상태 관리 패턴으로, 이벤트 기반 상태 관리를 제공합니다. Streams와 RxDart를 기반으로 하여 비동기 상태 변화를 쉽게 처리할 수 있습니다.
Bloc 패턴의 주요 개념:
- Event: 사용자의 액션이나 시스템에서 발생한 상태 변화를 나타내는 객체입니다.
- State: 현재 애플리케이션의 상태를 나타냅니다.
- Bloc: 이벤트가 발생하면 비즈니스 로직을 처리하고 새로운 상태를 발행하는 클래스입니다. Bloc은 이벤트를 입력으로 받고, 상태를 출력으로 발행합니다.
- Stream: 비동기 데이터 흐름을 처리하며, Bloc은 상태 변화를 Stream으로 발행하여 UI가 이를 구독하고 업데이트됩니다.
Bloc 패턴의 흐름:
- UI에서 Event를 Bloc에 전달하면, Bloc은 해당 이벤트를 처리하고 새로운 State를 Stream으로 발행합니다.
- UI는 Stream을 구독하여 상태가 변경될 때마다 화면을 업데이트합니다.
Bloc 패턴의 장단점:
- 장점:
- 상태가 비동기로 처리되므로 복잡한 비동기 작업에 적합합니다.
- 상태 변화 로직이 명확하게 분리되어 테스트가 용이합니다.
- UI와 비즈니스 로직이 철저하게 분리됩니다.
- 단점:
- 초기에 Stream, RxDart 개념을 이해하는 데 시간이 걸릴 수 있습니다.
- 작은 애플리케이션에서 사용하기에는 다소 과할 수 있습니다.
Redux와 Bloc 패턴의 차이점
특징 | Redux | Bloc 패턴 |
상태 관리 방식 | 단일 전역 상태 관리 | 이벤트 기반 상태 관리 |
상태 변경 방법 | 액션을 디스패치하여 리듀서에서 처리 | 이벤트를 트리거하여 Bloc에서 처리 |
비동기 처리 | 미들웨어를 사용 (redux-thunk, saga 등) | Stream과 RxDart를 통해 비동기 처리 |
보일러플레이트 | 코드 양이 많고 장황할 수 있음 | 초기 설정이 복잡할 수 있음 |
테스트 용이성 | 순수 함수로 상태를 관리하므로 용이 | 상태와 로직이 분리되어 있어 용이 |
Flutter 지원 | 별도의 플러그인을 사용 | Flutter에 최적화되어 있음 |
Share article