Event Bus 게임 이벤트 관리 - cheona-thousand-man/Unity-myBasics-Wiki GitHub Wiki

이벤트 버스 패턴이란

이벤트 버스 패턴 이벤트에서 발행/구독 모델을 사용하여 오브젝트를 연결하는 방법

  • 게시자 publisher는 이벤트 버스에서 선언한 특정 종류의 이벤트를 구독자에게 게시 가능
  • 이벤트 버스 event bus는 구독자와 게시자 사이의 이벤트 전송을 조정
  • 구독자 subscriber는 이벤트 버스를 통해 특정 이벤트의 구독자로 자신을 등록
    image

1. 장·단점

  • 장점
    • 분리
      • 오브젝트를 분리(decoupling)
      • 직접 참조가 아닌 이벤트로 통신
    • 단순성 이벤트의 구독/게시 메커니즘 추상화로 단순함
  • 단점
    • 성능
      • 이벤트 시스템 내부에 오브젝트 간 메시지 관리 저수준 메커니즘 구현
      • 약간의 성능 비용 발생 가능(단, 플랫폼에 따라 비용 절감 가능)
    • 전역(gloabal)
      • (static으로 선언되었기에) 전역적 접근으로 디버깅과 유닛테스트 난이도 증가

2. 사용시기

  • 빠른 프로토타이핑
    • 새로운 게임 메커니즘이나 기능을 빠르게 prototyping
    • 분리 상태 유지하면서 이벤트로 각자 다른 동작을 트리거 하는 컴포넌트 제작
  • 프로덕션 코드
    • 게임 이벤트를 더 정교하게 관리할 이유가 없을 경우
    • 복잡한 이벤트 타입 or 구조체를 다루지 않을 경우
  • 전역 범위 이벤트
    • 1:1 혹은 1:소수의 구독 이벤트의 경우, 이벤트 버스로 관리하지 않음

이벤트 버스 구현 예제 UML

image

대안

1. 옵저버

  • 오브젝트(subject)가 오브젝트(observer) 목록을 유지/관리하며 내부 상태 변경을 알리는 방식(오래된 방식)
  • Entity 그룹 간 1:N 관계에서 고려할 패턴

2. 이벤트 큐

  • publisher가 생성한 이벤트를 큐에 저장 후 편한 시간에 subscriber에게 전달
  • publisher와 subscriber 간 시각적 관계 분리

3. ScriptableObject

  • Unity에서 만들 수 있는 이벤트 시스템
  • 새로운 커스텀 이벤트 구현 용이
  • 확장 및 조정할 수 있는 이벤트 시스템 구현