[flutter] 플러터에서 bloc 패턴을 사용하여 예약 시스템 구현하기

이번 포스트에서는 플러터(Flutter) 앱에서 BLoC(Block Logic Component) 패턴을 사용하여 예약 시스템을 구현하는 방법에 대해 알아보겠습니다. BLoC 패턴은 상태 관리와 비즈니스 로직 분리를 위한 효과적인 방법으로, 앱의 복잡성을 줄이고 유지보수성을 높일 수 있습니다.

1. BLoC 패턴 소개

BLoC 패턴은 플러터에서 앱의 비즈니스 로직과 UI를 분리하기 위한 설계 패턴으로, StreamStreamController를 사용하여 상태를 관리합니다. 주요 구성 요소로는 BlocProvider, Bloc, BlocBuilder 등이 있으며, 이를 통해 앱의 데이터 흐름을 효율적으로 관리할 수 있습니다.

2. 예약 시스템 구현

2.1. BLoC 모듈 생성

먼저, 예약 시스템과 관련된 비즈니스 로직을 포함한 BLoC 모듈을 생성합니다. 예를 들어, ReservationBloc 클래스를 만들어 예약 데이터를 처리하고 상태를 업데이트합니다.

class ReservationBloc {
  final _reservationController = StreamController<List<Reservation>>();
  Stream<List<Reservation>> get reservations => _reservationController.stream;

  final _addReservationController = StreamController<Reservation>();
  Sink<Reservation> get addReservation => _addReservationController.sink;

  List<Reservation> _reservationList = [];

  ReservationBloc() {
    _addReservationController.stream.listen(_handleAddReservation);
  }

  void _handleAddReservation(Reservation newReservation) {
    // 예약 추가 로직 구현
    _reservationList.add(newReservation);
    _reservationController.add(_reservationList);
  }

  void dispose() {
    _reservationController.close();
    _addReservationController.close();
  }
}

2.2. BLoCProvider를 통한 모듈 제공

위에서 생성한 ReservationBlocBlocProvider를 통해 전역에서 제공하고, 앱 내에서 BLoC에 접근할 수 있도록 합니다.

void main() {
  runApp(
    BlocProvider(
      bloc: ReservationBloc(),
      child: MyApp(),
    ),
  );
}

2.3. BLoC 사용

이제 화면에서 BLoC를 사용하여 예약 시스템을 구현할 수 있습니다. 예를 들어, ‘예약 추가’ 버튼을 눌렀을 때 BLoC를 통해 예약을 추가하고 상태를 업데이트하는 코드는 다음과 같을 수 있습니다.

class ReservationScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final reservationBloc = BlocProvider.of<ReservationBloc>(context);

    return FlatButton(
      onPressed: () {
        reservationBloc.addReservation.add(Reservation(DateTime.now(), 'New Reservation'));
      },
      child: Text('Add Reservation'),
    );
  }
}

결론

이렇게 BLoC 패턴을 사용하여 플러터 앱의 예약 시스템을 구현할 수 있습니다. BLoC 패턴을 적용하면 앱의 구조를 더욱 모듈화하고 유지보수하기 쉽도록 만들 수 있습니다. BLoC와 함께 상태 관리와 비즈니스 로직을 효율적으로 처리하여 안정적이고 확장 가능한 애플리케이션을 개발할 수 있습니다.

더 많은 자료와 예시는 flutter.dev에서 확인할 수 있습니다.