이벤트 주도적 방식

게임의 인공지능에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

이벤트 주도적 방식

Post by 비회원 »

지금 게임 프로그래밍을 공부하고 있는 학생입니다
아무리 책을 읽고 생각을해도 이벤트 드리븐 방식이라는게 이해가 잘 되지 않습니다
이벤트 주도적방식이란 이벤트와 관련있는 객체에 이벤트와 관련되 정보를 넘겨
처리한다는 것입니다
그런데 이 관련있는 객체는 어떻게 알수 있는 것인지
만약 좌표를 하나 하나 검색해서 영향권 안에있는 객체를 선택하는 것이라면
폴링이랑은 다를게 없는게 아닌지 ~~~
고수님들의 답변 부탁드립니다
비회원

Post by 비회원 »

윈도우즈API 정복을 공부
먼저 하신다음 겜 프로그래밍 공부를 하심이..
비회원

음...

Post by 비회원 »

지금 게임 프로그래밍을 공부하고 있는 학생입니다
아무리 책을 읽고 생각을해도 이벤트 드리븐 방식이라는게 이해가 잘 되지 않습니다
이벤트 주도적방식이란 이벤트와 관련있는 객체에 이벤트와 관련되 정보를 넘겨
처리한다는 것입니다
그런데 이 관련있는 객체는 어떻게 알수 있는 것인지
만약 좌표를 하나 하나 검색해서 영향권 안에있는 객체를 선택하는 것이라면
폴링이랑은 다를게 없는게 아닌지 ~~~
고수님들의 답변 부탁드립니다
말씀하신 내용은 메세지 디스패쳐에 관련된 내용이네요. 내부적으로 메세지가 다른 쪽으로 가는것은 폴링이랑 다를바가 없다고 보면 됩니다.
현실 세계로 예를 들면 "물건 치워~"라는 메세지가 다른 사람의 귀에 들릴려면 공기를 통해야 하고 그 이후에 다른 사람의 귀에 들어가서 들리겠지요. 현실세계에서 이 메세지를 전달해주는 역할은 공기라고 보면 됩니다. 컴퓨터에서는 폴링이건 이벤트 방식이건 결국 데이터에 접근하기 위해서는 '검색'을 할 수밖에 없는거지요.

또 다른 예로는 메세지 리스너를 통해서 명령어를 받는것이나 명령어 각각의 메소드를 만들어서 누군가가 호출하거나 둘다 똑같이 메세지 방식이라고도 합니다.

Object Technology: A Manager's Guide (Paperback)
by David A. Taylor (Author)

기회되시면 이 책 한번 읽어보세요.
chadr
Posts: 980
Joined: 2003-06-01 12:28
Location: 모대학
Contact:

Post by chadr »

이벤트 방식은 관점에 따라 조금 다릅니다.
운영체제를 예를 들어보면 이렇습니다.

컴퓨터에 운영체제는 한번에 단 한개만 동작합니다. 그리고 운영체제가 모든 것을 다 관리합니다. 이럴때 서비스를 제공하는 입장에서는(운영체제) 특정 디바이스 또는 프로세스를 검색후 락을 걸고 서비스를 제공합니다. 이때 한번에 하나밖에 처리 하지 못하므로(멀티 프로세서는 제외합니다.) 서비스를 제공하는 운영체제 입장에서는 폴링입니다.

하지만 서비스를 받는 입장에서는 조금 다릅니다. 디바이스 또는 프로세스는 각각의 시간을 할당받아서 동작합니다. 따라서 자신만의 일을 하던 도중에 운영체제가 해당 디바이스 또는 프로세스에 이벤트를 보냅니다. 물론 프로세스나 디바이스가 제공하는 어떠한 기능을 이용하여 보낼겁니다. 이때 디바이스와 프로세스 입장에서는 자신이 하던일을 하던 중에 뭔가를 받았으므로 이벤트 드리븐 방식이 됩니다.

하지만 여전히 운영체제 입장에서는 한번에 하나밖에 처리 하지 못하므로 폴링입니다.

단순히 설계적 면과 서비스를 누가 제공하고 받느냐에 따라서 달라지는 개념입니다.
비회원

관점의 차이가 주는 이득이라고 생각하시면 편하게 이해가 되실 듯 싶네요.

Post by 비회원 »

의문을 가지시는 내용이 이해가 갑니다.

예를 드신 내용으로 설명을 해보겠습니다.

어떤 좌표에 어떤 사건이 일어 났고
이 사건에 의해서 어떤 영향이 전파됩니다.

어떤 시스템이든 사건이 일어나고 그 사건이 영향을 미치고
다른 부분에 상태가 변하게 됩니다.

이런 일련의 상황들이 조합이 되서 어플리케이션 됩니다.

그런데 사건의 종류나 전체 시스템을 결정 짖는 상태가 적은 경우에는
그냥 직관적으로도 이해할 수 있습니다.

하지만 조금 만 사건의 종류가 늘어나고 상태의 개수가 늘어나도
전체를 콘트롤 하는데 아주 큰 어려움을 겪게 됩니다.

이걸 단순화 시켜 생각하면 사건이 일어나고 사건을 전파하고
그 사건에 영향을 미치는 상태들(객체)이 그 메시지에 반응하게 하면
더 사건과 객체를 분리해서 생각할 수 있게 됩니다.

결국 이벤트를 발생하는 쪽은 그 영향에 대해서는 상관하지 않고 이벤트 발생시킵니다.
이벤트를 받는 쪽은 해당 이벤트에 대해 반응하고 상태를 변경합니다.

그 사이에 윗분이 말씀하시는 디스패쳐가 결국 이벤트를 적절하게 분배합니다.

어떤 경우에는 폴링하는 방식과 결과론적으로 차이가 없을 수 있습니다.
하지만 폴링과는 다르게 분업(이벤트 트리거, 디스패쳐, 이벤트 컨슈머)이 되어 있으므로
효과적이 됩니다.

대충 마구잡이로 예를 들자면 어떤 좌표에 이벤트가 발생하면
그 좌표에 영향을 받는 객체를 일일이 찾는 것보다는

어떤 좌표에 이벤트가 발생했다고 모든 객체에 통지가 되고
객체들은 자신의 상태에 따라 자신의 상태를 바꿔야 하는지 말아야 하는 지 결정하는 방식이
각기 분할 되어 처리 할 수 있기 때문에 다루기 훨씬 용이합니다.

물론 실제로는 무자비하게 이벤트를 각 객체들이 다 다룬다는 것은 말도 안되므로

마치 전봇대 전단지 같이 아무나 볼테면 봐라 식의 이벤트도 있을 것이고
20세 남자들에게만 보내지는 징병 신체검사 서류같은 이벤트도 있을 것이고
가끔 중간에 도둑 맞기도 하는 일반 우편 같은 이벤트도 있을 수 있고
확실히 받은 사람이 확인은 되는 등기 우편 같은 이벤트도 있을 수 있고
아예 법적으로 발송한 내용까지 보증 받는 내용증명 같은 이벤트도 있을 수 있고
확실히 객체가 반응을 할 수 밖에 없는 체포 영장 같은 이벤트도 있을 수 있습니다.

쩝-_- 머 공공기관이라는 디스패쳐가 대부분 메시지를 분류해서
객체들이 필요 없는 메시지에 시달리지 않도록 하고 있기는 하지만요.

학생이라고 하셔서 이렇게 저렇게 이야기 해봤는데 확 머리에 박히지는 않겟어요.
Locked