본문 바로가기

엔트리(Entry)

엔트리에서 살펴보는 프로그래밍 원리 (1) - 이벤트 & 액션

서론이 너무 길었습니다. 꼭 말해야 하는 내용이긴 했는데, 그래도 하나하나 챙기다 보니 너무 길어지네요.
거두절미하고 오늘부터는 엔트리를 가지고 실제 프로그래밍 언어에서 살펴봐야 하는 개념들을 하나하나 챙겨보도록 하겠습니다.

 

오늘 이야기할 용어

오늘 주로 말할 개념은 다음 두 가지입니다.

  • 이벤트(event)
  • 액션(action)

그리고, 저것을 설명하기 위해서 다음과 같은 용어들이 부차적으로 등장할 예정입니다.

  • 오브젝트(object)
  • 함수 - 기능(function)
  • 클래스(class) - 인스턴스(instance)
  • 컴포넌트(component)
  • 위젯(widget)

부차적인 내용들은 지금은 다 모르셔도 상관이 없습니다.
오늘은 오브젝트(object)를 주로 설명드릴 예정이고, 나머지는 살짝 언급됩니다.
나중에 별도로 포스팅할 예정이니 지금은 그냥 그런 것들이 있는가 보다 하시면 됩니다.

뭐, 프로그래밍 좀 하셨던 분들은 이 짤을 떠올리시면 됩니다.

 

프로그래밍의 기본 흐름

엔트리의 처음 튜토리얼을 몇 개 해보시다 보면, 다음과 같은 화면을 만나시게 됩니다.

 

엔트리봇 기본 튜토리얼 중 마이크 입력 관련 내용입니다.

 

"시작 키를 눌렀을 때" 뭔가 작동하게 하고,
그다음 지정한 기능들을 아래에 붙인 순서대로 작동하게 하죠.

 

기본적으로 우리가 알고 있는 모~든 프로그램들은, 위와 같은 식으로 작동합니다.
무언가 동작하라는 '신호'나 '명령'을 받게 되면, 그것은 지정된 행동들을 수행하게 됩니다.

 

여기서 미리 지정된 행동들을 하게 하는 블록들을 엔트리에서는 액션(action)이라고 합니다.
그리고, 일반적인 프로그래밍 언어에서는 이런 것들을 "기능"이라고 부릅니다.


뭔가 영어 이름이 있을 것 같고, 실제로 이름이 있습니다. 하지만, 저는 그렇게 부르지 않고 있습니다.
왜냐하면... 저 영어 이름은 프로그래밍 언어에서 또 다른 아주 중요한 개념으로 존재하기 때문입니다.
(앞에서 살짝 나왔지만 조금 나중에 말씀드리겠습니다.)
혼동을 막기 위해 일단은 그냥 "기능" 이라고만 부르겠습니다.
아예 이 기회에 교육용 프로그래밍 언어의 개념과 맞물려서 "액션"으로 불러도 괜찮을지 모르겠네요.

 

혹여 프로세스(process)라고 부를 수도 있지 않겠느냐 하실 수 있을 텐데요.
그건 일련의 액션-기능을 너무 협소하게 지칭하는 것이 아닐까 싶어서, 일단은 그냥 한글로만 부르도록 하겠습니다.

지난 주말에 말씀드렸듯, 말이 가리키는 힘이라고 하는 게 의외로 강한 부분이 있다고 생각하기 때문에 말이죠.

 

그리고, 이런 액션들을 수행하기 위해 무언가 시작을 하게 만드는 블록들이 있었습니다.

 

대충 이런 애들입니다.


엔트리에서는 이런 블록들을 이벤트(event)라고 부릅니다.
이 개념은 일반적인 프로그래밍 언어에서도 동일하게 부릅니다.

 

단지, 이 이벤트는 여러분이 프로그래밍 언어를 접하시다 보면 굉장히 다양한 형태로 만나시게 됩니다.
이번처럼 프로그램을 동작시키기 위해, 혹은 특정 동작을 하기 위해 사람이 키보드나 마우스를 입력한다거나,
마이크를 통해 음성을 입력하고, 카메라로 사진을 촬영해서 사진 이미지를 입력받고,
심지어 어떤 숫자나 텍스트를 화면에 출력하기 위해 그 프로그램이 입력받는 것도 일종의 "이벤트"로 볼 수 있습니다.
가장 간단하고 자주 볼 수 있는 이벤트로는, 프로그램 실행을 하기 위해 프로그램을 실행시키는 것을 들 수 있겠습니다.

 

"무엇이" 작동하는가? - 프로그램? 오브젝트? 기타 등등?

자 그런데, 여기서 저 이벤트를 받아서 액션을 수행하는 주체를 과연 뭐라고 불러야 할까요?
아까 서두에서 주로 "오브젝트(object)"를 설명드린다고 말씀드렸습니다.

일단 오브젝트를 말씀드린 이유는, 교육용 프로그래밍 언어에서 가장 기본적으로 사용하는 '엔트리봇'이나,
또 다른 교육용 프로그래밍 언어인 스크래치에서 사용하는 기본 제공 스프라이트를 하나의 "이벤트를 입력받는 대상",

즉 오브젝트(object)라고 생각할 수 있기 때문입니다.

 

"명령을 수행하게 하는 대상"이 아닌 이유는, 위에서 설명했던 이벤트가 단지 외부에서 발생해서 입력을 받는 것이 아니기 때문입니다.
때로는 이런 오브젝트(편의상 계속 오브젝트라고 하겠습니다)가 스스로 이벤트를 발생시켜서,

다른 오브젝트를 움직이게 할 수도 있기 때문입니다.
'엔트리봇이 공을 발로 차서 날아가게 한다' 같은 상황을 생각하시면 될 것 같습니다.

 

자. 하지만, 그냥 오브젝트...로 퉁쳐버리면, 이게 일반적인 프로그래밍 언어에 대칭되는 개념이라고 볼 수 없겠죠?
실제 프로그래밍 언어에서는, 이런 오브젝트가 굉장히 다양한 형태로 존재합니다.

 

이렇게 똑같이 오브젝트(object)라고 불리는 녀석도 있습니다.

혹은 클래스(class)라고 불리고, 실제 그 모양을 바탕으로 생성된 인스턴스(instance)라고 불리는 녀석도 있습니다.

 

아주 기본적인 형태로, 수학 시간에도 배운 함수, 즉 function 이 있습니다.
네, 아까 "기능"이라고 부르려다 말았던 그 녀석입니다.
똑같이 "기능"입니다만, 여기에서 부르는 "기능"과 "액션"과는 개념이 분명히 다르기 때문에,
(액션은 이 기능의 "아웃풋"이라고 보셔야겠습니다.)
굳이 구분해서 부르려고 했던 것입니다.

 

혹은, 컴포넌트(component)위젯(widget)이라고 불리는 녀석도 있습니다.

일단 특정한 언어들은 일일이 지칭하지 않고, 이런 개념을 쓰는 언어들을 언급할 때 다시 만나게 될 것입니다.

 

이외에도 굉장히 다양한 형태나 이름으로 존재합니다만, 기본적으로 이 모든 녀석들은 모두 똑같이,

 

"이벤트를 받아서 정해진 액션을 수행한다는 것은 동일한"

 

녀석들이라고 보시면 되겠습니다.

 

엔트리의 블록은 그러면 정체가 뭘까요?

그러면 여러분들은 의문이 들 것입니다.

 

"우리가 엔트리에서 하나하나 짜 맞추는 블록들은 과연 어떤 개념일까요?"

 

네, 짐작하셨듯이, 이 녀석들 하나하나도 당연히 "오브젝트"입니다.

지정한 오브젝트를 "웃도록" 하는 액션이 있어야죠


앞 블록의 "이벤트"를 수신해서, 내부에서 정해진 "액션"을 수행하는 "오브젝트(그 외 기타 등등으로 불리는)"인 것이죠.
그렇다는 것은, 여러분들도 어느 정도 내공이 쌓이면 이 엔트리의 블록들을 구성할 수 있다는 생각이 들 것입니다.

실제로, 엔트리에서는 엔트리파이썬이라는, 파이썬을 약간 수정한 언어를 이용해서,
커스텀 블록을 작성 및 사용할 수 있는 가이드북을 제공하고 있습니다.
엔트리와 파이썬에 어느 정도 익숙하신 분들이라면 해 보면 재미있는 경험이 되실 것이라 생각합니다.

 

정리

일단 오늘은 프로그래밍 언어의 가장 핵심적인 흐름인 이벤트와 액션에 대해 말씀드렸습니다.
기계어가 됐던 뭐가 됐던, 일단 시작이 있고 작동이 있고 끝이 있어야 하는 만큼,
이 이벤트와 액션이라는 요소는 모든 프로그래밍 언어에서 절대 빠질 수 없는 요소라는 것을 이해하시고,
각각의 언어에서 이 부분이 어떻게 작동하는지 이해하시면 전체 구조를 이해하시는 데 많은 도움이 되실 것이라 생각됩니다.

 

일단 오늘의 구조를 잘 생각하시면서, 다음 포스팅에서 뵙겠습니다.