Flutter의 상태 관리 패턴 중 한 가지로, 앱의 상태와 사용자 이벤트를 관리해 주며 상태 변화에 따라 UI 업데이트 혹은 비즈니스 로직 처리에 대한 관리를 원활하게 만들어줍니다.
다른 상태 관리 패키지들에 비해 복잡한 데이터 흐름을 관리할 때 유용하며 구조화된 코드로 유지 보수에 도움이 되는 상태 관리 패키지입니다.
위와 같은 이유로 다소 큰 규모의 앱 또는 구조가 복잡한 앱에서 유용하며, 만약 작은 사이즈에 프로젝트라면 다른 패턴과 비교 후 프로젝트 특성에 따라 어울리는 상태 관리 패키지를 선택하는 것이 좋습니다.
공식 사이트
Bloc State Management Site
앱의 현재 상태를 이야기합니다.
ex) 데이터 로딩, 에러 상태, 값이 비어있는 상태 등
사용자의 액션 또는 시스템 이벤트를 이야기합니다.
ex) 버튼 클릭, 텍스트 입력 등
비즈니스 로직을 분리하여 코드의 가독성과 유지 보수성을 향상시킵니다.
상태 변화 로직을 중앙에서 관리하므로 상태 관리가 비교적 간단해집니다.
각 요소들이 분리되어 있어 테스트가 비교적 쉽습니다.
이벤트 트레킹을 통합적으로 관리할 수 있습니다.
정형화된 규칙으로 협업 시에 좋은 상태 관리 패키지입니다.
각각의 Bloc, 이벤트, 상태를 정의하고 관리해야 하므로 코드 양이 늘어날 수 있으며 초기 구현이 다소 복잡할 수 있습니다.
다른 상태 관리의 비해 학습 리소스에 품이 듭니다.
너무 많은 상태와 이벤트로 나누면 코드가 지나치게 분산될 수 있으며 이로 인해 디버깅이 어려워질 수 있습니다.
구조화된 코드 구현이 필요한 Bloc와 달리 비교적 간결한 코드와 함께 단순한 사용형태의 상태 관리 패키지로, 학습 난도가 낮은 편입니다. 다만 상태와 비즈니스 로직이 명확하게 분리하지 않을 수 있습니다.
Provider와 같이 Bloc에 비하여 GetX는 간결한 코드로 개발이 가능하며, emit
을 통하여 변화를 알려주어야 하는 Bloc와 달리 상태가 변경될 때 연관된 위젯이 자동으로 업데이트됩니다.