본문 바로가기

Flutter

[flutter]EventBus 개념 | 특징 | 사용방법 알아보기

반응형

안녕하세요? 이번 글은 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

반응형