플러터(Flutter) 앱에서 UI와 비즈니스 로직을 분리하고, 상태를 관리하기 위해 bloc 패턴을 사용하는 것은 매우 일반적입니다. bloc (business logic component) 패턴은 코드의 재사용성을 높이고 유지보수를 용이하게 하는 데 도움이 됩니다. 이 패턴을 사용하여 데이터 변경 이벤트를 처리하고, 앱의 상태를 업데이트할 수 있습니다.
1. bloc 패턴 개요
bloc 패턴은 UI와 비즈니스 로직을 분리하는 데 사용됩니다. 이 패턴은 이벤트들을 받아들이고, 상태를 생성하여 UI에 전달합니다. 이를 통해 UI는 상태를 기반으로 화면을 업데이트 할 수 있습니다.
2. flutter_bloc 라이브러리 설치
먼저, flutter_bloc 라이브러리를 사용하여 bloc 패턴을 구현할 수 있습니다. 이 라이브러리를 사용하면 bloc 패턴을 더 쉽게 사용할 수 있으며, 코드의 가독성과 유지보수성을 높일 수 있습니다.
dependencies:
flutter_bloc: ^7.3.0
3. Bloc 클래스 생성
import 'package:bloc/bloc.dart';
enum CounterEvent { increment, decrement }
class CounterBloc extends Bloc<CounterEvent, int> {
CounterBloc() : super(0);
@override
Stream<int> mapEventToState(CounterEvent event) async* {
switch (event) {
case CounterEvent.increment:
yield state + 1;
break;
case CounterEvent.decrement:
yield state - 1;
break;
}
}
}
위 코드는 간단한 CounterBloc 클래스를 작성한 것입니다. 이 클래스는 CounterEvent에 따라 상태를 변경합니다.
4. BlocProvider를 사용하여 Bloc 제공
BlocProvider(
create: (BuildContext context) => CounterBloc(),
child: YourWidget(),
)
BlocProvider를 사용하여 CounterBloc
을 YourWidget
에 제공하고, YourWidget
내에서 상태 변경을 구독할 수 있습니다.
5. BlocBuilder를 사용하여 UI 업데이트
BlocBuilder<CounterBloc, int>(
builder: (context, state) {
return Text('$state');
},
)
BlocBuilder
위젯을 사용하여 CounterBloc의 상태를 구독하고, 상태가 변경될 때마다 UI를 업데이트합니다.
이제 위의 단계를 따라가면, 플러터 앱에서 bloc 패턴을 사용하여 데이터 변경 이벤트를 처리할 수 있습니다. bloc 패턴을 사용하면 앱의 상태를 효과적으로 관리할 수 있고, 유지보수가 용이해집니다.
참고 문헌:
- https://bloclibrary.dev/
- https://pub.dev/packages/flutter_bloc