BlocProvider? BLoC 패턴?

Flutter 샘플코드를 살펴보다보면, BlocProvider 같은 것을 종종 확인하실 수 있어요. BLoC, Business Logic Component 패턴을 사용해서 Flutter 상태 관리를 수행하는 위젯인데, 오늘은 그 위젯의 주요 개념과 사용 방법을 간단히 알아볼게요!

`BlocProvider`는 BLoC (Business Logic Component) 패턴을 사용하여 Flutter에서 상태 관리를 수행하는 위젯입니다. `BlocProvider`는 BLoC 패턴을 구현한 `flutter_bloc` 패키지에서 제공하는 위젯 중 하나로, BLoC에 접근할 수 있게 하고 이를 위젯 트리에서 제공합니다.

BLoC 패턴의 주요 개념:

- BLoC: 애플리케이션의 비즈니스 로직을 포함하는 컴포넌트입니다. 사용자 인터페이스(UI)와 비즈니스 로직을 분리하여 테스트 가능하고, 재사용 가능하며, 유지보수가 쉬운 코드를 작성할 수 있도록 합니다.
- Events: 사용자 인터페이스에서 발생하는 다양한 사용자 작업(버튼 클릭, 스크롤 등)이 이벤트로 BLoC에 전달됩니다.
- States: BLoC은 내부 상태를 기반으로 화면에 표시할 상태(State) 객체를 생성하여 UI에 전달합니다.

BlocProvider의 역할:

1. 상태 제공: `BlocProvider`는 BLoC 인스턴스를 생성하고 이를 위젯 트리의 하위 위젯들에게 제공합니다. 그 결과, 위젯 트리의 어디서나 해당 BLoC에 접근할 수 있습니다.

2. 자동 해제: `BlocProvider`는 자식 위젯이 더 이상 필요하지 않게 되면 자동으로 BLoC을 해제(dispose)합니다. 이로써 메모리 누수를 방지하고 자원을 효율적으로 관리합니다.

3. 위젯 트리 내 BLoC 접근 용이성: `BlocProvider.of<T>(context)` 또는 `context.bloc<T>()`, `context.read<T>()` 메서드를 통해 관련 BLoC에 쉽게 접근할 수 있습니다.

4. 퍼포먼스 최적화: `BlocProvider`는 내부적으로 위젯 트리의 특정 부분만 재빌드되도록 최적화하여, 전체 위젯 트리가 불필요하게 재빌드되는 것을 방지합니다.

Bloc Pattern


사용 방법:

`BlocProvider`를 사용하여 BLoC을 제공하는 예는 다음과 같습니다:

BlocProvider<MyBloc>(
  create: (BuildContext context) => MyBloc(),
  child: MyWidget(),
);

여기서 `MyBloc`은 실제 BLoC 클래스이며, `MyWidget`은 해당 BLoC을 사용할 위젯입니다. `MyWidget` 또는 그 하위 위젯에서는 `context.read<MyBloc>()` (또는 `BlocProvider.of<MyBloc>(context)`)를 통해 `MyBloc` 인스턴스에 접근할 수 있습니다.

BLoC을 사용하면 복잡한 상태 관리와 비즈니스 로직을 효과적으로 처리할 수 있으며, `flutter_bloc` 패키지는 이 패턴을 Flutter에서 쉽게 구현할 수 있도록 다양한 위젯과 클래스를 제공합니다.
Previous Post Next Post