상태 관리는 앱의 데이터와 정보를 추적하는 방법과 변경 사항이 있을 때 사용자 인터페이스(UI)를 업데이트하는 방법입니다.
예를 들어 화면에 숫자를 표시하는 카운터 앱이 있고 사용자가 버튼을 탭할 때 해당 숫자를 늘리거나 줄이려는 경우
해당 숫자의 상태와 이를 표시하는 UI를 관리해야 합니다.
Flutter에서 상태 관리를 수행하는 방법에는 여러 가지가 있으며 각 방법에는 고유한 장단점이 있습니다. 이 기사에서는 세 가지 인기 있는 상태 관리 솔루션인 Riverpod2, BLoC 및 GetX를 비교해 보겠습니다. 우리는 그들이 어떻게 작동하는지, 무엇을 제공하는지, 그리고 서로 어떻게 다른지 알아볼 것입니다.
Riverpod 2 란 무엇인가 ?
Riverpod2는 Flutter의 가장 인기 있는 상태 관리 솔루션 중 하나인 Provider의 새롭고 향상된 버전입니다. 공급자는 InheritedWidget이라는 특수 위젯을 사용하여 위젯 트리 아래로 데이터를 전달합니다. 이렇게 하면 컨텍스트나 전역 변수를 사용하지 않고도 앱 어디에서나 데이터에 액세스할 수 있습니다.
Riverpod2는 다음과 같은 Provider의 일부 문제를 해결합니다.
- 더 이상 데이터에 액세스하기 위해 컨텍스트를 사용할 필요가 없습니다.
ref.watch대신 or 같은 간단한 구문을 사용할 수 있습니다 ref.read. - 아무것도 조롱하거나 재정의하지 않고도 위젯을 쉽게 테스트할 수 있습니다.
- 컴파일 타임 안전성 덕분에 IDE에서 코드 완성 및 오류 검사를 사용할 수 있습니다.
- 앱의 다른 부분에 영향을 주지 않고 데이터를 동적으로 변경할 수 있습니다.
Riverpod2에는 다음과 같은 몇 가지 나이스한 기능도 도입되었습니다.
- Auto-dispose: 더 이상 필요하지 않은 데이터는 자동으로 삭제되어 메모리와 리소스를 절약할 수 있습니다.
- Family: 형제 가족처럼 서로 다른 매개변수를 사용하여 동일한 데이터의 여러 인스턴스를 생성할 수 있습니다.
- StateNotifier: 상태 머신처럼 불변 상태를 생성하고 변경 사항을 쉽게 알릴 수 있습니다.
- Hooks: 기능적 위젯을 사용하고 React에서처럼 후크를 통해 데이터에 액세스할 수 있습니다.
Bloc 란 무엇인가 ?
BLoc는 Business Logic Component의 약자로 반응형 프로그래밍을 사용하는 Flutter용 상태 관리 솔루션입니다.
리액티브 프로그래밍은 데이터 스트림의 변화에 반응하는 코드를 작성하는 방법입니다.
BLoc는 앱을 비즈니스 로직과 UI의 두 부분으로 구분합니다. 비즈니스 로직은 이벤트(입력)를 처리하고 상태(출력)를 생성합니다.
UI는 상태를 듣고 그에 따라 업데이트됩니다.
BLoC는 다음 구성 요소와 함께 작동합니다.
- Events: 사용자 작업이나 네트워크 요청과 같이 Bloc로 전송되는 입력입니다.
- States: 데이터 모델 또는 UI 상태와 같이 Bloc에서 내보내는 출력입니다.
- Bloc: 컨트롤러나 관리자처럼 이벤트를 처리하고 상태를 생성하는 클래스입니다.
- Cubits: 이벤트를 사용하지 않고 메소드만 사용하는 단순화된 Bloc 버전입니다.
- BlocProvider: 부모와 같은 자식에게 BLoc 또는 Cubit을 제공하는 위젯입니다.
- BlocBuilder: 자식처럼 BLoc 또는 Cubit의 상태를 기반으로 자체적으로 재구성되는 위젯입니다.
- BlocListener: BLoc이나 Cubit의 상태 변화를 듣고 친구처럼 부작용을 수행하는 위젯입니다.
Getx 란 무엇인가 ?
Getx는 종속성 주입을 사용하는 Flutter용 상태 관리 솔루션입니다. 종속성 주입은 다른 코드를 생성하거나 알지 못한 채
다른 코드에 의존하는 코드를 작성하는 방법입니다.
Getx를 사용하면 컨텍스트나 전역 변수를 사용하지 않고도 앱에서 데이터를 쉽게 만들고 액세스할 수 있습니다.
생성자나 매개변수를 사용하지 않고 위젯이나 컨트롤러에 종속성을 주입할 수도 있습니다.
Getx는 다음 구성 요소와 함께 작동합니다.
- GetxController: 두뇌처럼 앱의 상태와 논리를 보유하는 클래스입니다.
- GetBuilder: 눈처럼 GetxController의 상태를 기반으로 자체적으로 재구성되는 위젯입니다.
- Getx: 귀처럼 여러 GetxController의 상태를 기반으로 자체적으로 재구성되는 위젯입니다.
- Obx: 코와 같이 관찰 가능한 값을 기반으로 자체적으로 재구성되는 위젯입니다.
- Get.put: 팩토리처럼 GetxController 인스턴스를 생성하고 등록하는 메서드입니다.
- Get.find: 상점과 마찬가지로 GetxController 인스턴스를 찾아서 반환하는 메서드입니다.
비교
다음은 사용 용이성, 성능, 테스트 가능성, 확장성 및 커뮤니티 지원 측면에서 이를 비교하는 표입니다.
사용 용이성, 성능, 테스트 가능성, 확장성 및 커뮤니티 지원 측면에서 이를 비교하는 몇 가지 주요 사항은 다음과 같습니다.
Riverpod 2
- 학습 곡선이 낮고, 간단하고 직관적인 API가 있으며, 상용구 코드가 적습니다.
- 성능이 좋고 InheritedWidget을 사용하며 자동 삭제 및 가족 기능이 있습니다.
- 테스트 가능성이 뛰어나고 문제 분리를 지원하며 테스트 패키지가 있습니다.
- 확장성이 좋고 크고 복잡한 앱을 처리할 수 있으며 StateNotifier 및 Hooks 기능이 있습니다.
- 적당한 커뮤니티 지원을 갖고 있으며 비교적 새로운 솔루션이며 공급자를 기반으로 합니다.
Bloc
- 가파른 학습 곡선, 복잡한 API 및 많은 상용구 코드가 있습니다.
- 성능이 좋고 스트림을 사용하며 BlocProvider 및 BlocBuilder 기능이 있습니다.
- 테스트 가능성이 뛰어나고 문제 분리를 지원하며 테스트 패키지가 있습니다.
- 확장성이 뛰어나고, 크고 복잡한 앱을 처리할 수 있으며, BlocDelegate, BlocObserver 기능을 가지고 있습니다.
- 높은 커뮤니티 지원을 받고 있으며 Flutter의 가장 인기 있는 솔루션 중 하나입니다.
Getx
- 학습 곡선이 매우 낮고, 간단하고 직관적인 API, 상용구 코드가 가장 적습니다.
- 성능이 뛰어나고 ValueNotifier를 사용하며 GetXController 및 Obx 기능이 있습니다.
- 테스트 가능성이 좋고, 문제 분리를 지원하며, 테스트 패키지가 있습니다.
- 적당한 확장성을 갖고 중소형 앱을 처리할 수 있으며 GetStorage 및 GetConnect 기능이 있습니다.
- 높은 커뮤니티 지원을 받고 있으며 Flutter의 가장 인기 있는 솔루션 중 하나입니다.
보시다시피 각 솔루션에는 고유한 장점과 단점이 있습니다.
사용자의 필요와 선호도에 가장 적합한 것을 선택할 수 있습니다.
'Flutter' 카테고리의 다른 글
이미지 접근 (Ios , Android) 권한 (0) | 2025.01.07 |
---|---|
iOS Xcode 시뮬레이터 키보드 안보일때 (1) | 2025.01.07 |
Dart 3.0 문법 (1) | 2024.02.21 |
Flutter 3.7 & Dart 3.0 업데이트 내용 (0) | 2024.02.19 |
Flutter pub.dev - 2) flutter_rating_bar 알아보기 (0) | 2024.02.07 |