본문 바로가기

카테고리 없음

[Flutter_개발] Flutter 상태 관리 방식 비교 (Riverpod 중심)

이번 학습에서는 Flutter에서 사용되는 다양한 상태 관리(State Management) 방식들을 비교하며, 특히 Riverpod의 개념과 특징을 중심으로 정리했다. 각 방식의 구조적 차이와 장단점을 이해함으로써, 프로젝트의 규모와 목적에 따라 적절한 방법을 선택할 수 있도록 하는 것이 목표였다.

1. Riverpod의 개념

Riverpod은 Flutter의 대표적인 상태 관리 라이브러리 중 하나로, 기존 Provider의 단점을 개선한 진화된 형태이다. BuildContext에 의존하지 않으며, 전역적으로 상태를 읽고 관리할 수 있다. 컴파일 타임에 오류를 잡아주기 때문에 타입 안정성이 높고, 테스트와 유지보수가 용이하다.

주요 특징

  • BuildContext 의존 없음
  • 컴파일 타임 안정성
  • Hot Reload 안정적 지원
  • Provider 간 의존성 관리 가능
  • 비동기 데이터(Future, Stream) 관리 지원

2. Riverpod 기본 구조

final counterProvider = StateProvider<int>((ref) => 0);

class CounterPage extends ConsumerWidget {
  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final count = ref.watch(counterProvider);
    return Scaffold(
      body: Center(child: Text('현재 값: $count')),
      floatingActionButton: FloatingActionButton(
        onPressed: () => ref.read(counterProvider.notifier).state++,
      ),
    );
  }
}
  • ProviderScope: 앱 전체에 Provider를 적용하는 루트 위젯
  • ConsumerWidget: Provider 값을 구독하여 UI를 업데이트
  • ref.watch(): 상태 구독 및 UI 갱신
  • ref.read(): 상태 읽기 (UI 갱신 없음)

3. 다른 상태 관리 방식 비교

(1) setState (기본 내장)

  • Flutter에서 가장 기본적인 상태 관리 방식
  • setState()로 간단히 UI를 갱신할 수 있으나, 규모가 커지면 유지보수 어려움

장점: 단순하고 빠른 구현
단점: 상태 공유 불편, 구조화 어려움
적합한 경우: 작은 규모 앱, 간단한 화면 상태

(2) Provider

  • Flutter 공식 팀이 만든 기본적인 상태 관리 패턴
  • ChangeNotifier 기반으로 작동하며, context를 통해 상태를 전달함

장점: 구조가 명확하고 공식 문서가 풍부
단점: BuildContext 의존성, 대규모 프로젝트에 부적합
적합한 경우: 중간 규모 앱

(3) Bloc / Cubit

  • Stream 기반의 구조적인 상태 관리 패턴
  • Business Logic을 명확히 분리할 수 있음

장점: 명확한 데이터 흐름, 테스트 용이
단점: 초기 설정 복잡, 코드량 많음
적합한 경우: 대형 앱, 팀 프로젝트

(4) GetX

  • 가장 간단하고 직관적인 상태 관리 방식 중 하나
  • 라우팅, DI, 상태관리를 한 번에 지원함

장점: 코드 간결, 빠른 개발
단점: 구조가 자유로워 관리 어려움  ui 라우팅 등등 패키지 하나에 많은 게 들어있어 무겁
적합한 경우: 개인 프로젝트, 프로토타입

(5) MobX

  • React의 MobX에서 영향을 받은 반응형 상태 관리
  • @observable, @action 등을 활용한 선언형 코드

장점: 반응형 구조, 직관적인 코드
단점: build_runner 필요, 초기 설정 번거로움
적합한 경우: 중간 규모 앱, 반응형 UI 중심 앱

(6) Redux

  • 모든 상태를 중앙 Store에서 관리하는 구조
  • 명확한 상태 흐름과 추적이 가능하지만, 보일러플레이트가 많음

장점: 상태 추적 용이, 디버깅에 강함
단점: 코드량 많고 복잡도 높음
적합한 경우: 대규모 협업 프로젝트

 

 

 

5. 배운 점

Riverpod은 기존 Provider의 구조를 개선한 현대적인 상태 관리 방식으로, 유연성타입 안정성이 강점이다. 각 상태 관리 방식은 프로젝트 규모와 협업 형태에 따라 선택이 달라지며, 작은 앱은 setState, 중형은 ProviderGetX, 대형은 Riverpod이나 Bloc이 적합하다. 앞으로는 Riverpod을 활용해 쇼핑몰 플랫폼 프로젝트의 상품 관리 및 UI 상태를 효율적으로 제어하는 연습을 진행할 예정이다.