> For the complete documentation index, see [llms.txt](https://jjlee.gitbook.io/entry-python/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jjlee.gitbook.io/entry-python/paradigm/4.3-event-driven.md).

# 4.3 이벤트 주도형 (Event-Driven)

이벤트 주도형 또는 이벤트 기반형(Event-Based) 프로그래밍 패러다임에 대해 알아보자. 이 패러다임이 대두되기 시작한 것은 사실한 운영체제(OS: Operating System)이 기존에 콘솔(Console)이라 불리는 텍스트기반으로 명령어를 일일히 입력해 운영체제와 소통하던 인터페이스(CLI: Command Line Interface)에서 그래픽 사용자 인터페이스(GUI: Graphic User Interface)방식으로 전환되기 시작하면서 대두된 것으로, 즉, GUI 환경 맞는 형식에 프로그램이 필요했고, 프로그래밍 개발방식도 마찬가지로 이에 맞춘 대응이 필요했다고 볼 수 있겠다. GUI 환경이란 다른게 아니고, 그래픽 화면 기반에서 시스템(즉 컴퓨터)를 다루는 것으로 PC든 스마트폰이든 클릭과 터치로 선택하고 조작하고 하는 것이 이미 우리가 컴퓨터를 다루는 보편화된 환경이 되어있기 때문에 이 프로그래밍 패러다임의 이해에는 크게 어려움은 없을 것 같다. 그럼에도 이벤트 주도형의 개념을 다음의 그림을 보고 더 잘 이해해 보자.

<figure><img src="https://1991069597-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnDUP8xZ7pbezrK2wo5dX%2Fuploads%2FRVGUokwS6jMXGLhL1oIG%2Fimage.png?alt=media&amp;token=da8c4c47-8ffa-4fc3-9d10-736462a7b7a0" alt="" width="375"><figcaption><p>출처: <a href="https://kamang-it.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8C%A8%EB%9F%AC%EB%8B%A4%EC%9E%84%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EA%B8%B0%EB%B0%98-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8DEvent-based-programming">Kamang's IT Blog</a></p></figcaption></figure>

**지금 화면에 보이는 내 프로그램에게서 어떤 행동을 촉발(트리거: Trigger)되게 만드는 모든 상황이 사건(이벤트)라 지칭할 수 있다. 사용자가 화면상에 특정 이미지 버튼(또는 아이콘)을 누른 시점, 특정 키보드 자판의 키(알파벳, 특수문자, 방향키 등)를 누른 시점, 마우스의 특정 버튼(왼쪽/중간/오른쪽 등)을 누른 시점, 어떤 예정된 시간이 된 시점, 다른 프로그램 자체로부터의 내 프로그램을 호출하는 시점 등등 말이다.**

즉 개발자는 이러한 이벤트가 발생할 것을 미리 사전에 예상하고, 이러한 각각의 이벤트가 발생했을 때 어떤 일을 수행하라 라는 식으로 개념을 갖고 코드작성을 해나가는 식의 프로그래밍의 방식을 이벤트 기반형 프로그래밍 패더라임이라 할 수 있다. 우리는 이미 엔트리에 이러한 방식으로 코드작성을 해본 경험이 많아서 아마도 개념적 이해나 코드적용에는 크게 어려움이 없을 것으로 예상한다. 다만, 우리는 그것을 엔트리-파이썬에서는 어떤 함수를 활용해 코딩할 수 있는지만 알아보면 되겠다.

다음의 표에서 엔트리 안에 이미 존재하는 이벤트의 종류와 그 이벤트에 맞는 미리 사전 정의된(약속된) 콜백함수([3.1장 콜백함수 참조](/entry-python/basic_syntax/3.1-hello-world.md#undefined-5))의 목록을 확인할 수 있다.

|        이벤트 종류       |                                                                                                                                         블록코딩용 블록                                                                                                                                         |           텍스트코딩용 콜백함수           |
| :-----------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------: |
| 화면에 시작하기 버튼을 클릭했을 때 |                  ![](https://1991069597-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnDUP8xZ7pbezrK2wo5dX%2Fuploads%2Fgit-blob-09308b42af791674132a727d5173bb5ead5c5351%2F%EC%97%94%ED%8A%B8%EB%A6%AC%20%EB%B8%94%EB%A1%9D%20\(8\).png?alt=media)                 |        def when\_start():       |
|    키보드에 키를 눌렀을 때    | <img src="https://1991069597-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnDUP8xZ7pbezrK2wo5dX%2Fuploads%2Fgit-blob-77bbb1dd5dedb92a15f96e5d5e4b390273f2bb2f%2F%EC%97%94%ED%8A%B8%EB%A6%AC%20%EB%B8%94%EB%A1%9D%20(9).png?alt=media" alt="" data-size="original"> |    def when\_press\_key("q"):   |
|      마우스 클릭했을 때     |                 ![](https://1991069597-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnDUP8xZ7pbezrK2wo5dX%2Fuploads%2Fgit-blob-72396ca27ddd29780d0d141184af150e536f2a69%2F%EC%97%94%ED%8A%B8%EB%A6%AC%20%EB%B8%94%EB%A1%9D%20\(10\).png?alt=media)                 |  def when\_click\_mouse\_on():  |
|    마우스 클릭을 해제했을 때   |                 ![](https://1991069597-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnDUP8xZ7pbezrK2wo5dX%2Fuploads%2Fgit-blob-9c6ee9dbfab1dc377bb7ab4379d1f303f70ecd3b%2F%EC%97%94%ED%8A%B8%EB%A6%AC%20%EB%B8%94%EB%A1%9D%20\(11\).png?alt=media)                 |  def when\_click\_mouse\_off(): |
|     오브젝트 클릭했을 때     |                 ![](https://1991069597-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnDUP8xZ7pbezrK2wo5dX%2Fuploads%2Fgit-blob-260a2e697b24ac21e15b3e5ba70b3960567ec17e%2F%EC%97%94%ED%8A%B8%EB%A6%AC%20%EB%B8%94%EB%A1%9D%20\(12\).png?alt=media)                 |  def when\_click\_object\_on(): |
|   오브젝트 클릭을 해제했을 때   |                 ![](https://1991069597-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnDUP8xZ7pbezrK2wo5dX%2Fuploads%2Fgit-blob-b10e2ba4430bf3639a02a764bdd435808637c60b%2F%EC%97%94%ED%8A%B8%EB%A6%AC%20%EB%B8%94%EB%A1%9D%20\(13\).png?alt=media)                 | def when\_click\_object\_off(): |
|   새로운 장면이 시작되었을 때   |                 ![](https://1991069597-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FnDUP8xZ7pbezrK2wo5dX%2Fuploads%2Fgit-blob-581699619f5aea467dfb39542cf5784653eea689%2F%EC%97%94%ED%8A%B8%EB%A6%AC%20%EB%B8%94%EB%A1%9D%20\(14\).png?alt=media)                 |    def when\_start\_scene():    |
