Event Bus 게임 이벤트 관리 - cheona-thousand-man/Unity-myBasics-Wiki GitHub Wiki
이벤트 버스 패턴이란
이벤트 버스 패턴 이벤트에서 발행/구독 모델을 사용하여 오브젝트를 연결하는 방법
- 게시자 publisher는 이벤트 버스에서 선언한 특정 종류의 이벤트를 구독자에게 게시 가능
- 이벤트 버스 event bus는 구독자와 게시자 사이의 이벤트 전송을 조정
- 구독자 subscriber는 이벤트 버스를 통해 특정 이벤트의 구독자로 자신을 등록
1. 장·단점
- 장점
- 분리
- 오브젝트를 분리(decoupling)
- 직접 참조가 아닌 이벤트로 통신
- 단순성 이벤트의 구독/게시 메커니즘 추상화로 단순함
- 분리
- 단점
- 성능
- 이벤트 시스템 내부에 오브젝트 간 메시지 관리 저수준 메커니즘 구현
- 약간의 성능 비용 발생 가능(단, 플랫폼에 따라 비용 절감 가능)
- 전역(gloabal)
- (static으로 선언되었기에) 전역적 접근으로 디버깅과 유닛테스트 난이도 증가
- 성능
2. 사용시기
- 빠른 프로토타이핑
- 새로운 게임 메커니즘이나 기능을 빠르게 prototyping
- 분리 상태 유지하면서 이벤트로 각자 다른 동작을 트리거 하는 컴포넌트 제작
- 프로덕션 코드
- 게임 이벤트를 더 정교하게 관리할 이유가 없을 경우
- 복잡한 이벤트 타입 or 구조체를 다루지 않을 경우
- 전역 범위 이벤트
- 1:1 혹은 1:소수의 구독 이벤트의 경우, 이벤트 버스로 관리하지 않음
이벤트 버스 구현 예제 UML
대안
1. 옵저버
- 오브젝트(subject)가 오브젝트(observer) 목록을 유지/관리하며 내부 상태 변경을 알리는 방식(오래된 방식)
- Entity 그룹 간 1:N 관계에서 고려할 패턴
2. 이벤트 큐
- publisher가 생성한 이벤트를 큐에 저장 후 편한 시간에 subscriber에게 전달
- publisher와 subscriber 간 시각적 관계 분리
3. ScriptableObject
- Unity에서 만들 수 있는 이벤트 시스템
- 새로운 커스텀 이벤트 구현 용이
- 확장 및 조정할 수 있는 이벤트 시스템 구현