[Flutter / 플러터] 상태관리 - GetX, Provider, Bloc 패턴

2022. 4. 25. 13:17Flutter/Get X

어떤 상태관리가 좋은 관리인가?

하나의 UI를 구축하기 위해선 Build 라는 메서드를 호출하게 되고 

Build 메서드 안에 어떠한 값(변수) 가 들어가게 되는데 이러한 값들을 핸들링하고 변조하고 변조한 값을 보여지는 과정을 상태관리라 한다.

 

1. SetState

 - Flutter의 Tutorial / Project Starter(첫프로젝트생성 시) 의 '그 상태관리'

 - 특정한 Widget 내에서 단기적으로 쓰이고 말 때 사용하면 편한 상태관리

 

2. BloC

- Stream을 Flutter 에서 사용해야한다면 선택해야할 라이브러리.

- 상태 관리 라이브러리 중 초창기에 나온 도구로, 특유의 BloC 패턴은 익혀두면 매우 큰 도움이 됨.

- BloC 상태관리를 선택하는데 있어 가장 큰 고민, Cubit / BloC

- Cubit 

   - 상태의 변경을 Function을 통해 관리

   - 변경되고 그리고 바뀐 값을 가져올때,

      emit / onChanged 등으로 개발자가 어느정도 시점을 특정할수 있음.

   - 단순 UI를 핸들링 하는데에 상당히 효과적

class CounterCubit extends Cubit<int> {
  CounterCubit() : super(0);

  void increment() => emit(state + 1);
  void decrement() => emit(state - 1);
  void reset() => emit(0);
}

- BLoC

   - 상태의 변경을 Event를 통해 관리

   - 여러 요인으로 인해 잦은 변경이 많은 관리, 주체에 대해 Event로 관리 되다보니 어느 변화던 추적하여 잡아낼 수 있음

   - 로그인 유무 / 특정 Action에 대한 추적을 Stream으로 관리하기에 효과적

class CounterBloc extends Bloc<CounterEvent, int> {
  CounterBloc() : super(0);

  @override
  Stream<int> mapEventToState(CounterEvent event) async* {
    switch (event) {
      case CounterEvent.decrement:
        yield state - 1;
        break;
      case CounterEvent.increment:
        yield state + 1;
        break;
    }
  }
}

3. Provider

 - Provider는 딱 상태관리 만을 위해 만들어진 라이브러리

 - 기본적인 Flutter의 기본 SDK도 연계가 상당히 좋고, Flutter 공식 홈페이지에서도 상태관리의 기본 예시가 Provider로 기재되어 있다.

4. GetX

 - 마치 Flutter안의 또 하나의 Framework

 - GetX는 Flutter를 더욱 편하게 쓰기 위해 개조한 Flutter 같다.

 - Flutter를 쓰면서 다소 귀찮아 질수 있는 BuildContext와 StatefulWidget의 State 객체의 존재를 지울 수도 있으며,

    Navigator부터 Connection까지 제공한다.

 - 인기도가 엄청 높다.

 

 - GetX 라이브러리 전용 Rx객체(RxInt, RxString, RxList ...)부터.  .obs / Obx(() => Widget)의 명령어를 통해 동적 화면관리, 

    코드 내에서 BuildContext 객체를 전혀 사용하지 않고, 모든 Widget을 StatelessWidget으로 활용 하는 것을 추천하며, 

    GetX 만의 .to / .toNamed / .off / .offAll 등 별도의 Navigator System, 심지어 별도의 http / websocket Connection Method

    를 갖춘 거의 별도의 Framework를 만들어 둔 것과 같은 형태로 기존의 Flutter 개발과 결이 많이 다르다는 것을 느낄 수 있다.

 

5. 결론

 - 다른 사람들이 좋다고 하는 라이브러리에 맹신하기 보다는, 이 라이브러리를 선택한 이유는 본인에게 있어야한다.

 - 유사 라이브러리가 있다면 비교해 보고 사용하고, 기능을 정확히 파악하고 적재적소에 사용해야한다고 생각한다.

 

 - 간단한 상태관리를 활용한 Count App

   - https://github.com/curogom/flutter_state_management 

 

GitHub - curogom/flutter_state_management: Flutter Festival Songdo example Project

Flutter Festival Songdo example Project. Contribute to curogom/flutter_state_management development by creating an account on GitHub.

github.com

  - 원래 기본 Counter App에 상태관리 형태를 붙여둔 Sample App