1 minute read

BLoC 란?

BLoC는 Presentation(view) 와 Logic 간의 긴밀한 결합 없이 개발자가 앱 전체에서 상태를 효율적이고 편리하게 관리할 수 있도록 하는 디자인 패턴입니다. 또한 여러 위젯에서 동일한 논리의 재사용성을 목표로합니다. 2018년 Google I/O에서 Google에 의해 처음 언급된 이후 Flutter 앱 개발의 상태 관리 솔루션과 관련하여 많은 개발자의 사실상 표준이 되었습니다.

상태 관리

모바일 앱 프로젝트가 특정 크기 이상이 되면, 위젯이 전체 앱에서 데이터를 공유할 확률이 점점 높아집니다. 장바구니에 담긴 상품이나 로그인 상태 와 같은 부분입니다. 이런 종류의 앱 상태가 위젯 트리의 루트에 매우 가까이에서 변경되고 최소 깊이 3 이상으로 전달되어야 하는 경우, 매우 번거로워집니다. 이 정보를 항상 생성자에 전달하고, 중첩 위젯이 응답으로 해당 상태를 변경할 사용자 상호작용을 등록할 때 호출되는 콜백 함수를 전달합니다.

어떻게 작동하는가?

BLoC의 이면의 아이디어는, 위젯이 현재 의존하고 있는 BLoC의 상태를 항상 알고있다는 것입니다. 위젯은 상태가 변경되기를 원할 때(예: 사용자 상호작용에 대한 응답으로) BLoC에 어떤 일이 발생했음을 알립니다(예: 로그인이 트리거 됨) BLoC는 정의된 로직에 따라 반응하고, n개의 상태를 비동기식으로 내보냅니다.(예: “로드 중”, “로그인 성공”) BLoC에서 상태가 방출될 때마다 특정 BLoC 상태에 종속된 위젯 부분이 그에 따라 업데이트됩니다.

결과적으로 레이어는 데이터 레이어와 직접 통신하지 않습니다. 대신 이 책임을 둘 사이의 중계자 역할을 하는 BLoC 계층 에 위임합니다.

기술적으로 말하면, BLoC는 스트림을 기반으로합니다. 스트림은 기본적으로 발급자로부터 데이터를 비동기적으로 흐르게 하는 은유입니다. 이 데이터 흐름을 들을 수 있습니다. 발급자는 모든 리스너에게 알리는 새 이벤트를 생성할 시기를 결정합니다. 기술적으로 정확하지는 않지만 Future의 시퀀스와 같은 스트림을 상상하는 것이 도움이 될 수 있습니다.

BLoC Pattern

패턴과 패키지

BLoC 패턴은 공식적으로 권장되는 상태관리 접근 방식 중 하나이지만, 플러터의 직접적인 기본 지원은 없습니다. 대신, 구현하거나, 이미 모든 상용구 코드를 구현한 패키지를 사용합니다. 이것이 BLoC 패키지입니다. 이 패키지는 BLoC 패턴을 사용하는 데 필요한 모든 핵심 클래스를 제공합니다.

왜 기본 상태 관리 기능을 사용하지 않나요?

기본적은 StatefulWidgets를 사용하는 방법은 글로벌 상태를 관리하기에는 제한적입니다. 이는 체크 박스의 활성 상태와 같이 매우 제한된 영향력을 가진 상태를 관리하는 것입니다.

StatefulWidget을 사용하면 상태가 바인딩된 위젯에 밀접하게 결합되어 있으므로 프레젠테이션 레이어에서 상태를 분리할 수 없기 때문입니다.

언제 BLoC를 사용하나요?

  • 위젯이 데이터 계층과 통신해야 하는 경우(예: 저장소, 서비스, API 호출)
  • 위젯의 로직이 위젯 자체에 의해 관리되고 너무 복잡해졌다는 느낌이 들 때
  • 로직이 위젯과 완전히 독립적이기를 원할 때
  • 위젯의 논릴르 자동으로 테스트하려는 경우
  • 프로젝트를 시작하고 두 개 이상의 화면이 있고, 확장 가능하고 유지 관리가 용이해야 한다는 것을 알고 있을 때

Applying the BLoC pattern in practice