2023. 4. 20. 05:02ㆍDEV/Flutter
Web이든, App이든 상태 관리는 필수! 그렇다면 어떤 걸 사용해야 좋을까? 간단하게 조사를 해보자.
Flutter의 기본으로 setState() 함수가 있지만, 페이지를 왔다갔다 하면서 사용하기에는 역부족이다. Single Page Application을 만든다면 괜찮겠지만.
일단 Flutter의 State 관리를 해주는 라이브러리를 알아보자.
Flutter State Management Libraries
📎 List of state management approaches
- Provider
- Riverpod
- setState
- InheritedWidget & InheritedModel
- Redux
- Fish-Redux
- BLoC / Rx
- GetIt
- MobX
- Flutter Commands
- Binder
- GetX
- states_rebuilder
- Triple Pattern (Segmented State Pattern)
- solidart
- flutter_reactive_widget
Flutter 공식 사이트에서 안내하는 것만 이정도이다. 이걸 언제 다 알아보나.. 그럴 수는 없다!
그래서 여기저기 기웃기웃해서 대충 많은 사람들에게 많이 회자되는 몇 가지의 리스트를 추려보았다.
- Provider
- BLoC
- GetX
- Riverpod
일단 이 정도?
Provider
가장 Flutter 기본적인 방식이라고 할 수 있다. 그래서 이미 코드를 많이 작성한 상태에서 도입을 할 때 가장 난이도가 낮다고 한다. Flutter 기본과 유사하니 러닝 커브도 낮다. 그래서인지 Flutter 공식 사이트에서도 가장 먼저 추천을 하는 것 같다.
BLoC
채팅처럼 String 데이터가 수시로 오고가는 Stream을 많이 사용한다면 BLoC을 선택하는 게 좋다고 한다.
또 Bloc Pattern(Business Logic Component)을 사용하고 있어서, BLoC을 사용하면 화면 View Model보다는 Business Logic 중심으로 코드를 작성하게 된다고 한다. 그래서 앱을 비즈니스 로직 단위로 나눌 수 있는 게 특징이다. 다만 이를 익히기 위한 러닝 커브가 높다는 것이 단점이라면 단점이다.
GetX
GetX는 단순히 상태 관리 기능만 제공하는게 아니라, Navigation, http 통신 등 여러 가지 기능을 모두 제공하고 있어서 이 자체로 하나의 Framework라고 볼 수 있을 정도이다. 그래서 생산성만 놓고 봤을 때는 가장 효율적인 라이브러리이다.
다만, GetX는 자체 Root Widget을 사용하면서 Flutter의 BuildContext, StatefulWidget 등 일부 기본 코드를 아예 사용할 필요가 없게 만들어져있다. 그렇기 때문에 GetX를 사용하면 기본 Flutter 코딩과 상상히 동떨어지게 되고, 메모리를 많이 사용한다는 우려도 있다.
GetX를 살짝 사용해본 개인적인 생각을 말하자면, 일단 너무 편하고 쉽다. 하지만 GetX를 사용하다보면 Flutter 기본 코딩 방식이 잊혀져 간다. GetX를 계속 사용하다 GetX를 사용하지 않는 환경에서 Flutter로 개발을 하는 상황에 처한다면? 흐음...
Riverpod
Provider를 개발한 사람이 최근에 만든 라이브러리이다. Provider를 만들 때의 몇몇 문제점들을 보완해서 만들었다고 한다. 또 Rivepod은 Run time이 아닌 Compile time에 Error를 발견할 수 있다. 다만 최근에 개발되었기 때문에 테스트 단계를 끝낸 지 오래 되지 않아서 많이 언급되지 않은 듯 하다.
요약
- 간단한 개발에 쉽고 빠르게 적용하려면, Provider
- 빠르게 개발을 하는 게 목표라면, GetX
- 복잡한 비즈니스 로직과 Stream을 많이 사용한다면, BLoC
- 가장 최신의 기술을 사용하고 싶다면, Riverpod
현재 Provider와 GetX만 사용을 해보았다. 둘 다 어렵지 않게 적용할 수 있는 건 정말 큰 장점이라고 생각한다. 다만, 본격적으로 대규모의 개발을 하려면 당장 쓰기 쉬운 걸 선택할 것이 아니라 신중하게 비교하고 분석을 해야할 것이다.
'DEV > Flutter' 카테고리의 다른 글
Flutter - iOS 시스템 설정에 Flutter 앱 설정 추가하기 (0) | 2023.10.19 |
---|---|
Flutter Build Runner - Filesystem Error 대응 방법 (0) | 2023.08.29 |
Flutter Database - NoSQL Hive 사용하기 (0) | 2023.04.21 |
MacOS에 Flutter 설치하기 - feat. Homebrew (0) | 2023.03.31 |
[Firebase & iOS Xcode Build Error] Cloud Firestore Package 설치 후 Xcode Build가 너~~무 느려서 진행이 안되는 문제 해결 방법 (0) | 2022.08.17 |
Android Emulator에서 한글 키보드 사용하기 (0) | 2022.07.23 |
Flutter에서 Firestore Database 사용하기 (0) | 2022.07.20 |
Flutter & Firebase - Authentication State 구독 메소드 (0) | 2022.07.18 |