Flutter State Management, 상태 관리는 어떻게 할까?

2023. 4. 20. 05:02DEV/Flutter

반응형

Web이든, App이든 상태 관리는 필수! 그렇다면 어떤 걸 사용해야 좋을까? 간단하게 조사를 해보자.

 Flutter의 기본으로 setState() 함수가 있지만, 페이지를 왔다갔다 하면서 사용하기에는 역부족이다. Single Page Application을 만든다면 괜찮겠지만.

일단 Flutter의 State 관리를 해주는 라이브러리를 알아보자. 

Flutter State Management Libraries

📎 List of state management approaches
  1. Provider
  2. Riverpod
  3. setState
  4. InheritedWidget & InheritedModel
  5. Redux
  6. Fish-Redux
  7. BLoC / Rx
  8. GetIt
  9. MobX
  10. Flutter Commands
  11. Binder
  12. GetX
  13. states_rebuilder
  14. Triple Pattern (Segmented State Pattern)
  15. solidart
  16. flutter_reactive_widget

Flutter 공식 사이트에서 안내하는 것만 이정도이다. 이걸 언제 다 알아보나.. 그럴 수는 없다!

그래서 여기저기 기웃기웃해서 대충 많은 사람들에게 많이 회자되는 몇 가지의 리스트를 추려보았다. 

  1. Provider
  2. BLoC
  3. GetX
  4. 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만 사용을 해보았다. 둘 다 어렵지 않게 적용할 수 있는 건 정말 큰 장점이라고 생각한다. 다만, 본격적으로 대규모의 개발을 하려면 당장 쓰기 쉬운 걸 선택할 것이 아니라 신중하게 비교하고 분석을 해야할 것이다.

반응형