이번 포스트에서는 플러터(Flutter) 앱에서 BLoC(Block Logic Component) 패턴을 사용하여 예약 시스템을 구현하는 방법에 대해 알아보겠습니다. BLoC 패턴은 상태 관리와 비즈니스 로직 분리를 위한 효과적인 방법으로, 앱의 복잡성을 줄이고 유지보수성을 높일 수 있습니다.
1. BLoC 패턴 소개
BLoC 패턴은 플러터에서 앱의 비즈니스 로직과 UI를 분리하기 위한 설계 패턴으로, Stream
과 StreamController
를 사용하여 상태를 관리합니다. 주요 구성 요소로는 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를 통한 모듈 제공
위에서 생성한 ReservationBloc
을 BlocProvider
를 통해 전역에서 제공하고, 앱 내에서 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에서 확인할 수 있습니다.