이벤트 주도형 프로그래밍
Event-driven programming| 프로그래밍 패러다임 |
|---|
컴퓨터 프로그래밍에서 이벤트 기반 프로그래밍은 사용자 동작(마우스 클릭, 키 누르기), 센서 출력 또는 다른 프로그램이나 스레드로부터의 메시지 전달과 같은 이벤트에 의해 프로그램의 흐름이 결정되는 프로그래밍 패러다임입니다.이벤트 기반 프로그래밍은 그래픽 사용자 인터페이스 및 사용자 입력에 대한 응답으로 특정 작업을 수행하는 데 중점을 둔 기타 응용 프로그램(예: JavaScript 웹 응용 프로그램)에서 사용되는 주요 패러다임입니다.이것은, 디바이스 드라이버의 프로그래밍에도 해당됩니다(예를 들면, USB[1] 디바이스 드라이버 스택의 P).
이벤트 드리븐 어플리케이션에는 일반적으로 이벤트를 리슨하고 콜백 기능을 트리거하는 메인루프가 있습니다.임베디드 시스템에서는 메인 루프가 지속적으로 실행되는 대신 하드웨어 인터럽트를 사용하여 동일한 것을 실현할 수 있습니다.대기 및 종료와 같은 높은 수준의 추상화를 제공하는 언어에서는 작업이 더 쉽지만 이벤트 기반 프로그램은 모든 프로그래밍 언어로 작성할 수 있습니다.
이벤트 핸들러
일반 이벤트 핸들러
이벤트와 메인루프를 체크하는 코드는 어플리케이션 간에 공통적이기 때문에 많은 프로그래밍 프레임워크는 그 구현을 처리하고 사용자가 이벤트 핸들러에 코드만 제공할 것으로 예상합니다.이 간단한 예에서는 이벤트핸들러에 대한 콜이 있을 수 있습니다.OnKeyEnter(): ENTER 키를 누르기 전에 사용자가 입력한 내용에 대응하는 문자열이 포함된 인수를 포함합니다.두 숫자를 추가하려면 이벤트 핸들러 외부에 있는 스토리지를 사용해야 합니다.실장은 다음과 같습니다.
카운터 K와 정수 T를 글로벌하게 선언합니다.OnKeyEnter(문자 C) {K가 0이면 C를 숫자 N으로 변환하고 그렇지 않으면 K를 증가시킵니다. N을 T에 추가하고 결과를 인쇄한 다음 K를 0으로 재설정하십시오.이벤트 핸들러는 외부 이벤트에 응답하여 실행되기 때문에 시퀀셜 프로그램에서는 이력을 추적하는 것은 보통 사소한 일이지만, 이벤트 구동 프로그램에서 어떤 순서로 호출될 때 기능하도록 핸들러를 올바르게 구조화하는 것은 특별한 주의와 계획이 필요할 수 있습니다.
이벤트 핸들러 생성
이벤트 구동 프로그램을 개발하는 첫 번째 단계는 이벤트 핸들러 루틴이라고 불리는 일련의 서브루틴 또는 메서드를 작성하는 것입니다.이러한 루틴은 메인 프로그램이 응답하는 이벤트를 처리합니다.예를 들어, GUI 프로그램의 명령 버튼을 마우스 왼쪽 버튼으로 한 번 클릭하면 다른 창이 열리거나 데이터베이스에 데이터를 저장하거나 응용 프로그램을 종료하는 루틴이 트리거될 수 있습니다.현대의 많은 프로그래밍 환경은 프로그래머에게 이벤트 템플릿을 제공하여 프로그래머가 이벤트 코드를 작성하는 데 집중할 수 있도록 합니다.
두 번째 단계는 이벤트핸들러를 이벤트에 바인드하여 이벤트가 발생했을 때 올바른 함수가 호출되도록 하는 것입니다.그래피컬 에디터는 첫 번째 두 단계를 조합합니다.버튼을 더블클릭하면 에디터는 버튼을 클릭하는 사용자와 관련된 (빈) 이벤트핸들러를 만들고 사용자가 이벤트핸들러를 편집할 수 있도록 텍스트창을 엽니다
이벤트 구동 프로그램을 개발하는 세 번째 단계는 메인 루프를 작성하는 것입니다.이 함수는 이벤트 발생을 체크한 후 일치하는 이벤트핸들러를 호출하여 처리하는 기능입니다.대부분의 이벤트 구동 프로그래밍 환경은 이미 이 메인 루프를 제공하므로 애플리케이션 프로그래머가 특별히 제공할 필요는 없습니다.RPG는 1960년대 설계 개념이 위에서 논의한 이벤트 구동 프로그래밍과 유사했던 IBM의 초기 프로그래밍 언어로서, 사이클 초기에 설정된 '인디케이터'(플래그)에 따라 계산이 반응하는 내장 메인 I/O 루프("프로그램 사이클")를 제공했습니다.
PL/I 예외 처리기
PL/I에서는 프로그램 자체가 주로 이벤트 구동은 아닐 수 있지만 하드웨어 오류, 오버플로 또는 "프로그램 검사"와 같은 비정상적인 이벤트가 발생하여 더 이상의 처리를 방해할 수 있습니다.예외 핸들러는 종료 전에 청소하는 청소 루틴을 제공하거나 복구 작업을 수행하고 중단된 절차로 돌아가기 위해 (보이지 않는) 발신자의 "ON 문"에 의해 제공될 수 있습니다.
일반적인 용도
대부분의 기존 GUI 개발 도구 및 아키텍처는 이벤트 기반 프로그래밍에 [2]의존합니다.Java AWT 프레임워크는 이벤트 디스패치 스레드라고 불리는 단일 스레드에서 모든 UI 변경을 처리합니다.마찬가지로 Java 프레임워크 JavaFX의 모든 UI 업데이트는 JavaFX 응용 프로그램 스레드에서 수행됩니다.[3]
또한 Node.js와 같은 시스템도 이벤트 [4]중심입니다.
비판
이벤트-액션 모델에 의존하는 프로그램 설계는 비판을 받았으며 이벤트-액션 모델이 프로그래머로 하여금 오류 발생 가능성이 높고 확장하기 어렵고 지나치게 복잡한 애플리케이션 [2]코드를 생성하도록 유도한다는 것이 제안되었다.테이블 구동식 스테이트 머신은 실행 가능한 [5]대안으로 주장되어 왔습니다.반면 테이블 구동식 스테이트 머신 자체는 스테이트 폭발 [6]현상을 비롯한 중대한 약점을 안고 있습니다.이에 대한 해결책은 페트리망을 사용하는 것이다.
스택리스 스레드화
하드웨어 기술 언어에서는 이벤트 중심 접근법이 사용됩니다.스레드 컨텍스트는 이벤트를 액티브하게 처리할 때 CPU 스택만 필요합니다.이 작업을 완료하면 CPU는 다른 이벤트 구동 스레드 처리로 이행할 수 있기 때문에 대량의 스레드를 처리할 수 있습니다.이것은 본질적으로 유한 상태 기계 접근법입니다.
「 」를 참조해 주세요.
- Autonomous Peripheral 동작
- 프로그래밍 패러다임 비교
- 데이터 플로우 프로그래밍(비슷한 개념)
- DOM 이벤트
- 이벤트 지향 아키텍처
- 이벤트 스트림 처리(동일한 개념)
- 하드웨어 설명 언어
- 방해하다
- 제어 반전
- 메시지 지향 미들웨어
- 프로그래밍 패러다임
- 퍼블리시-서브스크라이브 패턴
- 반응기 패턴
- 신호 프로그래밍(비슷한 개념)
- 스테이지형 이벤트 주도 아키텍처(SEDA)
- 시간 트리거 시스템(컴퓨터 시스템의 대체 아키텍처)
- 이벤트 기반 프로그래밍을 위한 분산 실행 모델인 가상 동기화
레퍼런스
- ^ Vivek Gupta, Ethan Jackson, Shaz Qadeer and Sriram Rajamani (November 2012). "P: Safe Asynchronous Event-Driven Programming". Microsoft Research. Retrieved 20 February 2017.
{{cite journal}}: CS1 maint: 작성자 파라미터 사용(링크) - ^ a b Samek, Miro (April 1, 2013). "Who Moved My State?". Dr. Dobb's. Retrieved 2018-01-28.
- ^ Fedortsova, Irina (June 2012). "Concurrency in JavaFX". JavaFX Documentation Home. Oracle. Retrieved 4 January 2018.
The JavaFX scene graph, which represents the graphical user interface of a JavaFX application, is not thread-safe and can only be accessed and modified from the UI thread also known as the JavaFX Application thread.
- ^ Node.js의 이벤트 기반 프로그래밍.
- ^ Samek, Miro (11 March 2009). "State Machines for Event-Driven Systems". Retrieved 19 March 2013.
- ^ Patrick Schaumont (2012-11-27). A Practical Introduction to Hardware/Software Codesign. ISBN 978-1-4614-3737-6.
외부 링크
- scaleconf에서 동시성 패턴 프레젠테이션 제공
- 이벤트 중심 프로그래밍: Stephen Ferg의 소개, 튜토리얼, 역사, 튜토리얼
- 이벤트 주도 프로그래밍, Alan Gauld의 튜토리얼
- 이벤트 콜라보레이션, Martin Fowler 기사
- Swing Threading에 대한 재고, Jonathan Simon의 기사
- Chris McDonald의 기사, 이벤트 주도형 프로그래밍 스타일 Archived 2005-02-20 at the Wayback Machine, 2005-02-20
- 템플릿 전문화를 사용한 이벤트 중심 프로그래밍, Christopher Diggins의 기사
- Schiffer, S.; Frohlich, J.H. (1994). "Concepts and architecture of Vista-a multiparadigm programming environment". Proceedings of 1994 IEEE Symposium on Visual Languages. pp. 40–47. doi:10.1109/VL.1994.363642. ISBN 0-8186-6660-9. S2CID 15927869.
- Event-Driven Programming and Agents, 장
- Lab Windows/CVI 리소스
- Distributed Publish/Subscribe Event System(MSN.com 및 Microsoft.com에서 운영 중인 오픈소스 예)
- Javascript 이벤트 루프