사건 기반 프로그래밍

컴퓨터 프로그래밍에서 사건 기반 프로그래밍 또는 이벤트 기반 프로그래밍(, EDP)은 프로그램의 흐름이 외부 이벤트에 의해 결정되는 프로그래밍 패러다임이다. 키보드와 마우스, 터치패드 및 터치스크린으로부터 발생하는 사용자 인터페이스(UI) 이벤트와 외부 센서 입력이 흔한 사례이다. 이벤트는 다른 프로그램으로부터의 메시지, 다른 스레드로부터의 알림, 또는 기타 네트워크 이벤트와 같이 프로그래밍 방식으로 생성될 수도 있다.

사건 기반 프로그래밍은 그래픽 사용자 인터페이스(GUI) 애플리케이션과 네트워크 서버에서 사용되는 지배적인 패러다임이다.

사건 기반 애플리케이션에는 일반적으로 이벤트를 감시하다가 해당 이벤트 중 하나가 감지되면 콜백 함수를 실행하는 이벤트 루프가 존재한다.

사건 기반 프로그램은 모든 프로그래밍 언어로 작성될 수 있지만, 고수준 추상화를 제공하는 언어에서 그 작업이 더 쉽다.

사건 기반 모델과 정확히 일치하지는 않지만, 인터럽트 핸들러와 예외 처리는 많은 유사점을 가지고 있다.

이벤트 기반 패러다임과 메시지 기반(또는 큐 기반) 패러다임을 구분하는 것이 중요하다. 이벤트 기반 서비스(예: AWS SNS)는 소비자와 분리되어 있는 반면, 메시지/큐 기반 서비스(예: AWS SQS)는 소비자와 결합되어 있다.

 이벤트 루프 
이벤트를 가져와서 전달하는 이벤트 루프는 애플리케이션들 사이에서 공통적이기 때문에, 많은 프로그래밍 프레임워크는 이벤트 루프의 구현체를 제공하며 애플리케이션 개발자는 이벤트 핸들러만 작성하면 된다.

IBM의 초기 프로그래밍 언어인 RPG는 1960년대 설계 개념이 위에서 언급한 사건 기반 프로그래밍과 유사했는데, 내장된 메인 I/O 루프("프로그램 사이클"로 알려짐)를 제공하여 사이클 초기에 설정된 "인디케이터"(플래그)에 따라 계산이 반응하도록 했다.

 이벤트 핸들러 
실제 로직은 이벤트 핸들러 루틴에 포함된다. 이 루틴들은 메인 프로그램이 응답할 이벤트들을 처리한다. 예를 들어, GUI 프로그램에서 "저장" 명령 버튼을 한 번 마우스로 클릭하면 데이터베이스에 데이터를 저장하는 루틴이 트리거될 수 있다. "종료" 버튼은 프로그램을 종료하는 루틴을 트리거할 수 있다. 이벤트 루프는 이러한 모든 명령 버튼과 기타 GUI 위젯으로부터 이벤트를 수신하여 각 버튼에 적절한 이벤트 핸들러 루틴을 전달한다.

이벤트 루프가 이벤트에 응답하여 올바른 루틴을 전달할 수 있도록 이벤트 핸들러 루틴은 특정 이벤트에 바인딩되어야 한다. 많은 통합 개발 환경(IDE)은 프로그래머에게 특정 이벤트(예: 버튼 클릭)에 대한 이벤트 처리 템플릿을 제공함으로써 이 과정을 단순화하여 프로그래머가 이벤트 처리 코드 작성에 집중할 수 있도록 한다.

순차적 프로그램에서는 실행 순서와 이력을 추적하는 것이 보통 간단하다. 그러나 사건 기반 프로그램에서는 이벤트 핸들러가 외부 이벤트에 응답하여 비순차적으로 실행된다. 어떤 순서로 호출되더라도 제대로 작동하도록 이벤트 핸들러를 올바르게 구조화하기 위해서는 특별한 주의와 계획이 필요하다.

 일반적인 용도 
기존의 대부분의 GUI 아키텍처는 사건 기반 프로그래밍을 사용한다. 윈도우에는 메시지 루프가 있다. 자바 AWT 프레임워크는 이벤트 디스패칭 스레드라고 불리는 단일 스레드에서 모든 UI 변경을 처리한다. 마찬가지로 자바 프레임워크인 자바FX의 모든 UI 업데이트는 JavaFX 애플리케이션 스레드에서 발생한다.

Node.js와 같은 대부분의 네트워크 서버와 프레임워크 또한 사건 기반이다.Event-Driven Programming in Node.js.

 같이 보기 
 하드웨어 기술 언어
 인터럽트
 제어 반전
 메시지 지향 미들웨어
 프로그래밍 패러다임
 발행-구독 모델
 반응자 패턴

 각주 

분류:프로그래밍 패러다임
분류:이벤트 (컴퓨팅)