안녕하세요? 이번 글은 EventBus에 대해서 정리해볼게요
개념
EventBus는 publish/subscribe 패턴을 따릅니다. listeners는 이벤트를 구독하고 publishers는 이벤트를 실행합니다. 따라서 listeners를 정의하고 추적할 필요없이 개체가 상호작용 할 수 있어요
그렇기 때문에 코드의 의존성을 낮출 수 있다는 장점이 있고 아키텍처 패턴*으로 초기 서비스지향 아키텍처에서 파생되었다고 합니다.
*아키텍처 패턴이란 소프트웨어 개발 시 일반적으로 발생하는 문제에 대해 일반적이고 재사용 가능한 솔루션으로 디자인 패턴과 유사하나 더 큰 범주에 속합니다.
EventBus 패턴은 특히 MVC(또는 MVP)의 디커플링에 유용합니다. MVC패턴이 한 그룹으로 이뤄졌을 때는 문제가 발생하지 않지만 여러 그룹이 생기면 컨트롤러 간에 결합도가 높아지는 문제가 발생합니다.
EventBus를 사용하면 결합도를 낮출 수 있습니다.
예제코드
1.EventBus의 인스턴스를 만듭니다.
import 'package:event_bus/event_bus.dart';
EventBus eventBus = EventBus();
2.EventBus 파일에 Class를 정의합니다.
class UserLoggedInEvent {
User user;
UserLoggedInEvent(this.user);
}
class NewOrderEvent {
Order order;
NewOrderEvent(this.order);
}
3.event에 listener를 등록합니다.
eventBus.on<UserLoggedInEvent>().listen((event) {
// All events are of type UserLoggedInEvent (or subtypes of it).
print(event.user);
});
EventBus는 listeners를 추척하기 위한 기본 메커니즘으로 Dart Stream을 사용합니다. 그러므로 Stream에서 사용할 수 있는 모든 기능을 사용할 수 있습니다.
이벤트를 unsubscribe하고싶다면 StreamSubscriptions을 사용할 수 있습니다.
StreamSubscription loginSubscription = eventBus.on<UserLoggedInEvent>().listen((event) {
print(event.user);
});
loginSubscription.cancel();
4.입력받은 이벤트를 발생한다. (=fire)
eventBus.on().listen((event) {
// Print the runtime type. Such a set up could be used for logging.
print(event.runtimeType);
});
참고
https://pub.dev/packages/event_bus
https://medium.com/dhiwise/event-bus-example-in-flutter-4043f983dad5
https://medium.com/dhiwise/event-bus-in-flutter-e577f0a06e1
'Flutter' 카테고리의 다른 글
[flutter] Searching for inspections failed: undefined method `map' for nil:NilClass (해결방법: xcode 버전 낮추기) (0) | 2023.04.11 |
---|---|
[flutter] iphone App 클론코딩하기1편 스톱워치StopWatch 구현 (2) | 2023.04.10 |
[flutter] typedef 왜 쓰는지 이유/사용하는 방법/간단한 예제코드 (0) | 2023.03.10 |
안드로이드스튜디오에서 sqlite database 확인하기 (+database inspector가 안보일 때 찾는 방법) (0) | 2023.01.31 |
[flutter] stream과 streambuilder의 간단하게 요약정리 (0) | 2023.01.27 |