디자인 패턴/게임 프로그래밍 패턴

[게임 프로그래밍 패턴][15]이벤트 큐

우향우@ 2024. 5. 5. 15:45

개요

이벤트 큐는 한 개체의 다른 개체에 대한 특정 요청을 즉시 처리하는 것이 아닌 큐에 저장해두었다가 나중에 처리하는 것을 말한다. 크게 이벤트를 보내는 경우와 메세지를 보내는 경우가 있는데 이벤트는 큐에 특정 사건 발생시 이벤트를 넣고 등록된 리스너들에게 이를 전달하는 것이다. 이는 함수 호출등으로 구현된다. 메세지는 특정 기능을 요청하는 메세지를 큐에 넣으면 리스너가 그 내용들을 원할때 큐에서 꺼내 처리하는 것이다. 오디오 기능을 메세지를 통해 제공할 수 있다.

n대m

이벤트 큐는 큐에 요청을 넣는 개체 n개와 그 요청을 처리하는 개체 m개로 n대m으로 표현할 수 있다. 일대다, 다대일, 다대다 등이 많이 쓰이며 일대일은 이벤트큐보다는 그냥 큐 자료구조를 사용하는게 낫다.

 

특징

이벤트 큐로 얻을 수 있는 이점은 특정 요청을 호출하는 즉시가 아닌 이후로 미루므로 논리적인 비동기로 기능을 구현할 수 있다. 다음으로 여러 요청을 모아 한번에 처리하므로 비슷한 요청끼리 결합하여 처리할 수 있다. 예를 들어 오디오 출력 요청이 여러개 있을때 같은 소리 출력은 묶어 처리할 수 있다. 마지막으로 스레드 분리에 적합하다. 동기화 처리를 한 큐를 통해 요청하는 스레드와 요청받는 스레드간의 협동을 구현하기 용의하다.

이벤트 큐의 특징은 요청을 보내는 측과 받는 측을 코드 뿐 아닌 시간 측면에서도 디커플링한다는 점이다.

이벤트 큐의 경우 특정 부분에서 사용되는 지역적인 이벤트 큐도 될 수 있고 많은 개체가 공유하는 전역 이벤트 큐도 사용할 수 있다. 전역 이벤트 큐는 여러 요청자가 요청을 넣으면 리스너들은 등록해둔 특정 요청에 요청받는 방식이다.

 

 

 

 

참고서적

게임 프로그래밍 패턴