상태 관리(State Management)란 프로그램이나 애플리케이션이 실행되는 동안 데이터의 상태를 관리하는 것을 말합니다. 프로그램이 실행되면서 데이터는 계속해서 변하고 업데이트되는데, 이러한 데이터의 변화를 관리하고 제어하는 것이 상태 관리입니다.
즉, 상태 관리란 ‘UI에 변화를 주는 데이터를 어떻게 관리할 것인가?’에 대한 문제입니다.
가장 기본적인 방법은 StatefulWidget을 이용하여 상태를 관리하는 것입니다.
StatefulWidget을 사용하면 상태는 해당 위젯에 의해 관리됩니다. 하지만 복잡한 앱의 상태를 효율적으로 관리하기에는 한계가 있습니다.
따라서 Flutter에서는 다양한 상태 관리 패키지가 제공되고 있습니다.
Provider는 가장 간단하고 확장 가능한 상태 관리 패키지 중 하나입니다. InheritedWidget을 기반으로 동작하며, 상태를 전역적으로 관리할 수 있습니다.
주요 기능:
- 상태를 전역으로 공유하고, 위젯 트리 내에서 필요한 곳에서 접근할 수 있도록 합니다.
- Provider 패턴을 사용하여 상태 변화를 감지하고 해당하는 위젯을 리빌드합니다.
Riverpod는 Provider 패턴의 새로운 버전으로, Provider의 기능을 확장하고 개선한 패키지입니다. Provider와 마찬가지로 InheritedWidget을 기반으로 동작합니다.
주요 기능:
- Provider와 비슷한 문법을 사용하여 상태를 전역으로 공유하고, 상태 변화를 감지하여 위젯을 리빌드합니다.
- 상태 관리뿐만 아니라 의존성 주입 및 비동기 처리에도 효과적으로 사용할 수 있습니다.
Bloc은 비즈니스 로직을 분리하고 관리하기 위한 상태 관리 패턴입니다. 이벤트와 상태를 기반으로 동작하며, 리액티브 프로그래밍의 원칙을 따릅니다.
주요 기능:
- 이벤트를 통해 상태를 업데이트하고, 변경된 상태를 UI에 반영합니다.
- 비즈니스 로직을 담당하는 Bloc 클래스를 만들어 상태 관리를 분리하고 재사용성을 높입니다.
GetX는 상태 관리를 위한 간편한 솔루션을 제공하는 패키지입니다. 상태 관리뿐만 아니라 라우팅, 의존성 주입 등의 기능도 제공합니다.
주요 기능:
- 간단한 문법과 메서드를 제공하여 상태를 관리하고, 리액티브한 방식으로 상태 변경을 감지합니다.
- 상태 관리 뿐만 아니라 라우팅, 다이얼로그 표시, 테마 관리 등 다양한 기능을 제공합니다.