728x90


이벤트 기반 프로그래밍은 다른 말로 이벤트 구동형 프로그래밍(EDP : Event-driven programming)이라고 부른다.

이 이벤트 기반 프로그래밍에 대해서 한번 설명을 하고 지나갈 필요가 있다고 생각한다.

사실 어려운 내용은 전혀 아니다. 아니, 오히려 쉽다고 할 수 있다.


참고에 있는 순차적,절차적,객체지향적 프로그래밍을 읽어보면

과거에는 모든 프로그램의 흐름을 시간의 흐름대로 순서대로 해석하려는 경향이 있다고 했다.

물론 프로그램은 위에서 아래로 , 시간의 흐름대로 흘러가는게 맞다. 궁극적으로는 말이다.

그러므로 과거에는 오히려 이랬던게 타당하다. 실제로 현재도 모든 프로그램은 궁극적으로 그렇게 돌아가니까.




콘솔로 프로그래밍을 할경우에는 사용자의 입력을 받는 타이밍이 있고 인터럽트(일종의 예외)가 발생하더라도 굉장히 소수였다.

즉 흐름을 예측할 수 있었다는 것이고 예측 하지 못하는 예외들은 소수였다는 것이다.

따라서 그냥 일반적으로 순차적으로 코딩을 해도 아무 문제가 없었다.




문제는 현재는 이 흐름이 별로 맞지는 않다는 것이다.

과거에 흐름이 하나였던 시절에 비해서 현재는 (특히 GUI프로그래밍이라면) 흐름을 예측 할 수 없고 예측이 되지도 않는다.

그러나 시대가 흘러 GUI프로그래밍이 대두되면서 상황은 달라졌다.

예를들면 마우스를 어느타이밍에 누를지 모르고, 키보드를 어느 타이밍에 누를지 모른다.

즉 흐름을 예측하는 프로그래밍 자체가 의미가 없는 것이다.


이 상황에서도 일반적인 순차적 프로그래밍이 불가능 한건 아니다.

기존에 콘솔 프로그래밍시에 했던것 처럼 몇개의 예외(인터럽트)만 처리해주면 되는 일이다.

문제는 이 프로그래밍은 대부분이(사실상 전부) 예외로만 돌아간다는 것이다.

그래서 기존 프로그래밍 방식을 사용하면 모든 것을 예외처리하는 방식으로할 수 밖에없다.

그 대표적인것이 바로 윈도우 API이다.





사실  Win32 API는 너무 구식 기술이기에 이를 사용하여 프로그램을 코딩하는 일은 드물 것이라 생각은 하지만

Win32 API를 언급하는 이유는 순차적인 관점에서 이벤트들을 어떻게 처리하는지에 대해서 알 수 있기 때문이다.

실제로 이벤트들을 처리하는 과정은 매우 간단한데 일단 main함수에서 죽치고 앉아서 이벤트가 발생하기만을 하염없이 기다린다.

그 다음 이벤트가 발생하면 그 이벤트에 대응하는 작업을 재빨리 처리하고 다시 이벤트를 하염없이 기다린다.

이방법역시 이미 훌륭한 이벤트 기반 프로그래밍이라할 수 있다.

이 프로그래밍 방식에서 이미 main은 거의 손도 대지 않고 특정 이벤트들만 코딩을 하면된다.


그러다가 후대 사람들이 생각한 것이다.

어짜피 main이 하는역활은 동일하다. (무한히 이벤트를 기다리는 역활밖에 없다.)

그러면 main은 코딩할때 배제하고 코딩 초점을 이벤트에만 맞추면 되지 않을까?

하는 발상에 도달하게 되었고 그렇게 이벤트 기반 프로그래밍이 현대의 모습을 갖추게 되었다.

현대 이벤트 기반 프로그래밍들은 main의 역활은 거의 없다고 봐도 무방하고 이벤트를 만드는데만 초점이 맞춰져 있다.


그럼 이제 이벤트라는 것을 잘생각해보자. 단순히 이벤트만 있으면 되나?

내가 마우스로 클릭하는 이벤트가 있다고 치자. 단순히 클릭만 하면 되는가?

여기서 너무 이벤트만 초점을 맞추니 중요한건 잊은거 같은데 무엇을 클릭하느냐도 당연히 중요하다.


이제 이벤트를 일으키는건 마우스나 키보드, 타이머, 다른 프로그램., 운영체제, 프로그램내의 다른 상황등등...

뭐 다양할것인데 이벤트는 항상 대상이 있어야한다. 이 대상을 우리는 이벤트 소스라고 부른다.


이제 관점을 조금 바꿔보자. 우리는 항상 이벤트의 관점에서 생각을 했었다면, 이번에는 이벤트 소스(이벤트 대상)입장에서 생각해보자.

특정 버튼을 클릭 하면 팝업창을 띄운다고 생각해보자. 이벤트는 클릭이고 그 반응하는 이벤트 소스는 버튼일 것이다.

그러면 버튼을 엔터키를 타이핑한다고 생각해보자. 이벤트는 키보드타이핑이고 그 반응하는 이벤트 소스는 버튼일 것이다.


위의 말을 왜 꺼냈냐면 이벤트를 특정 이벤트 소스관점에서 볼수 있다는 것이다.

즉 우리가 이벤트가 일어났는데 그 이벤트에 대상이 된놈이 버튼이다. 라는 해석역시 가능하지만(Win32 API방식)

버튼이라는 놈은 특정 이벤트를 일으킬 가능성이 있다 라고 해석하는 방식또한 가능하다.(현대 이벤트 기반 프로그래밍)

그 모습을 도식화 하면 이렇게 된다. 





현대 이벤트 기반 프로그래밍들의 순서는  먼저 main함수에서 화면에 표시할 소스들(버튼,사진,텍스트)을 정의하고

그 소스들이 일으킬 수 있는 이벤트를 정의해주는걸로 프로그래밍을 한다.

이것이 이벤트 기반 프로그래밍이다.


이해가 잘 됬는지는 모르겠다. 일단 최대한 풀어 썼는데 대부분의 이벤트 기반 프로그래밍이 직관적이므로

사실 이 설명이 필요 없을 수도 있다. 그러나 혹시라도 기본 개념이 필요한 사람을 위해서 이 포스팅을 하게 되었다.

+ Recent posts