12. Flutter 수업- 리버팟(RiverPod), 리덕스(Redux),Bloc 패턴

리버팟(RiverPod), 리덕스(Redux),Bloc 패턴
홍윤's avatar
Oct 07, 2024
12. Flutter 수업- 리버팟(RiverPod), 리덕스(Redux),Bloc 패턴

1. RiverPod

💡
리버팟(RiverPod)은 Flutter 및 Dart 환경에서 상태 관리를 위한 라이브러리입니다. 리액티브 프로그래밍 패러다임을 따르며, 앱의 상태를 더 안전하고 간결하게 관리할 수 있도록 도와줍니다. RiverPod는 Flutter의 기존 상태 관리 도구인 Provider에서 개선된 점을 여러 가지 포함하고 있습니다. 특히, 글로벌 상태 공유를 더 직관적으로 처리할 수 있고, 테스트하기 쉬운 구조를 제공합니다.

리버팟의 주요 특징:

  1. 안전한 상태 관리: RiverPod는 상태를 안전하게 다룰 수 있도록 설계되어, Provider에서 흔히 발생하는 전역 상태의 혼란을 방지합니다.
  1. 독립적 상태 관리: RiverPod는 Flutter 프레임워크에 의존하지 않기 때문에, 더 독립적인 상태 관리를 할 수 있고, UI와 비즈니스 로직을 완벽하게 분리할 수 있습니다.
  1. 테스트 용이성: 상태 로직이 UI에서 분리되어 있기 때문에, 테스트가 간편합니다.
  1. 디버깅 및 성능 최적화: 상태가 언제 어디서 변경되는지 추적하는 것이 쉬워서 디버깅이 용이하며, 필요할 때만 상태를 갱신하는 등의 성능 최적화가 가능합니다.

RiverPod의 구성 요소

  • Provider: 상태를 제공하는 가장 기본적인 구성 요소입니다.
  • StateProvider: 상태를 읽고, 쓰고 변경할 수 있는 상태 관리 도구입니다.
  • FutureProvider: 비동기 상태를 관리하는 데 사용되며, Future 작업 결과를 제공합니다.
  • StreamProvider: 스트림 데이터와 관련된 상태를 관리하는 데 유용합니다.
  • StateNotifierProvider: 더 복잡한 상태 관리를 필요로 하는 경우 사용할 수 있는 Provider입니다.
리버팟은 Provider의 단점을 보완하여 더 견고하고 테스트하기 쉬운 상태 관리 도구로 많이 사용되고 있습니다. 프로젝트에서 사용할 때 유용하게 적용할 수 있을 것입니다.
 
  • 리버팟 사용법!
notion image
터미널에 입력하면 편하게 들어간다.
 
  • 플러그인 들어가서 riverpod snippets 다운하기
notion image

2. Redux

💡

Redux

Redux는 주로 React 애플리케이션에서 사용되지만, Flutter에서도 사용할 수 있는 상태 관리 패턴입니다. Redux는 단일 전역 상태 저장소를 기반으로 상태를 관리하며, 상태는 오직 액션과 리듀서를 통해서만 변경될 수 있습니다.

Redux의 주요 개념:

  1. Store: 애플리케이션의 모든 상태를 저장하는 중앙 저장소입니다.
  1. Action: 상태를 변경하기 위한 명령을 의미하며, 상태 변경을 나타내는 단순한 객체입니다.
  1. Reducer: 상태를 변경하는 함수로, 현재 상태와 액션을 받아서 새로운 상태를 반환합니다.
  1. Dispatch: 액션을 스토어에 보내서 상태 변화를 요청하는 함수입니다.

Redux의 흐름:

  • 애플리케이션에서 Actiondispatch하고, 이 액션은 Reducer를 통해 처리됩니다.
  • Reducer는 상태를 변경하고, Store는 새로운 상태를 UI에 반영합니다.

Redux의 장단점:

  • 장점:
    • 상태를 예측 가능하게 관리할 수 있습니다.
    • 전역적으로 상태를 관리할 수 있어 복잡한 애플리케이션에서 유용합니다.
    • 미들웨어를 통해 비동기 작업을 관리할 수 있습니다.
  • 단점:
    • 코드가 장황해질 수 있으며, 보일러플레이트 코드가 많이 필요합니다.
    • 작은 상태 변경을 위해 많은 양의 코드가 필요할 수 있습니다.

Bloc 패턴

💡

Bloc 패턴

Bloc (Business Logic Component) 패턴은 주로 Flutter에서 사용되는 상태 관리 패턴으로, 이벤트 기반 상태 관리를 제공합니다. StreamsRxDart를 기반으로 하여 비동기 상태 변화를 쉽게 처리할 수 있습니다.

Bloc 패턴의 주요 개념:

  1. Event: 사용자의 액션이나 시스템에서 발생한 상태 변화를 나타내는 객체입니다.
  1. State: 현재 애플리케이션의 상태를 나타냅니다.
  1. Bloc: 이벤트가 발생하면 비즈니스 로직을 처리하고 새로운 상태를 발행하는 클래스입니다. Bloc은 이벤트를 입력으로 받고, 상태를 출력으로 발행합니다.
  1. Stream: 비동기 데이터 흐름을 처리하며, Bloc은 상태 변화를 Stream으로 발행하여 UI가 이를 구독하고 업데이트됩니다.

Bloc 패턴의 흐름:

  • UI에서 Event를 Bloc에 전달하면, Bloc은 해당 이벤트를 처리하고 새로운 StateStream으로 발행합니다.
  • UI는 Stream을 구독하여 상태가 변경될 때마다 화면을 업데이트합니다.

Bloc 패턴의 장단점:

  • 장점:
    • 상태가 비동기로 처리되므로 복잡한 비동기 작업에 적합합니다.
    • 상태 변화 로직이 명확하게 분리되어 테스트가 용이합니다.
    • UI와 비즈니스 로직이 철저하게 분리됩니다.
  • 단점:
    • 초기에 Stream, RxDart 개념을 이해하는 데 시간이 걸릴 수 있습니다.
    • 작은 애플리케이션에서 사용하기에는 다소 과할 수 있습니다.

Redux와 Bloc 패턴의 차이점

특징
Redux
Bloc 패턴
상태 관리 방식
단일 전역 상태 관리
이벤트 기반 상태 관리
상태 변경 방법
액션을 디스패치하여 리듀서에서 처리
이벤트를 트리거하여 Bloc에서 처리
비동기 처리
미들웨어를 사용 (redux-thunk, saga 등)
Stream과 RxDart를 통해 비동기 처리
보일러플레이트
코드 양이 많고 장황할 수 있음
초기 설정이 복잡할 수 있음
테스트 용이성
순수 함수로 상태를 관리하므로 용이
상태와 로직이 분리되어 있어 용이
Flutter 지원
별도의 플러그인을 사용
Flutter에 최적화되어 있음
 
Share article

Uni