본문 바로가기

엔트리(Entry)

엔트리에서 살펴보는 프로그래밍 원리 (4) - 함수와 리소스, 그 외 것들

오늘이 엔트리 시리즈 마지막입니다.


계속 말씀드리지만 이 포스팅 시리즈는 엔트리의 기능을 전문적으로 소개하는 목적은 아닙니다.
하지만, 엔트리의 기능을 하나하나 만지면서 그냥 사용해 보는 것이 아니라,
이 기능들이 앞으로 여러분들이 실제로 배우게 될 프로그래밍 언어에서 각각 어떤 의미를 가지는가를 생각해 보고,
그 언어의 어떤 구문이나 기능이 이 블록에 해당하는지 생각해 보면 그것들을 배우는 데 많은 도움이 될 것입니다.

 

오늘 말씀드릴 이야기들은 두 가지입니다.

  • 함수 / 모듈 / 라이브러리
  • 리소스 / 애셋

지난 포스팅에서 말씀드린다고 했던 내용에서 하나가 빠졌는데, 그건 말미에 다시 말씀드리겠습니다.

결론부터 말하자면, 밀렸습니다. 죄송합니다 (_ _)

 

엔트리 메인 개발 화면

이제 본격적으로 엔트리의 '작품 만들기(https://playentry.org/ws/new)'를 선택하면 다음과 같은 화면이 나옵니다.

 

사실 이 화면이 엔트리로 뭔가 하는 메인 화면입니다

 

여러 가지 블록들이 있는데, 지금까지 말씀드렸던 기능들이 대부분 녹아 있는 블록들입니다.

  • 시작: "이벤트"에 해당합니다.
  • 흐름: "반복"과 "조건 분기"에 해당합니다.
    • "반복"은 아래의 '계산'에 있는 특수 블록에서 수행하는 '계산'에 따라 진행이 됩니다. 계산은 "연산"이겠죠?
    • "조건 분기"는 아래에 있는 '판단'에서 작성하는 특수 블록에 따라 분기가 나뉘게 되죠.
  • 움직임 / 생김새: "액션"에 해당합니다. 오브젝트의 상태가 바뀝니다. 위치가 바뀌거나 모양이 바뀌거나 하죠.
  • 붓/소리: 역시 "액션"에 해당합니다. 화면에 그림을 그리거나, 소리를 재생하거나 하는 동작을 하도록 하는군요.
  • 자료: 이전 포스팅에서 언급한 "데이터"에 해당합니다. 엔트리에서는 '변수'와 '리스트'를 사용하네요.

리스트에 관해서는 자료 구조에 관해서 별도 포스팅이 있을 예정이니 그때 따로 말씀드리려고 합니다.

 

그 이외의 블록들이 몇 개 남아 있는데요. 먼저 '함수' 관한 얘기를 드리겠습니다.

 

함수

중학교 수학 시간에 '함수'라는 것을 처음 배우게 됩니다. 5학년 때 '규칙과 대응' 단원에서 그 개념은 처음 배우지만요.
사실 프로그래밍 언어에서 사용하는 '함수(function)'이라는 녀석도 딱히 다르지 않습니다.
상자(함수의 함이 '상자 함[函]'자에서 온 거죠)에 어떤 값을 넣으면 안에서 어떤 처리를 한 다음 결과를 주는 것이니까요.
(안 주고 그냥 처리하고 끝나는 녀석들도 있습니다)

처음에 엔트리 소개할 때 올렸던 그림 재탕(...)

 

함수는 크게 두 가지 목적으로 만듭니다.

  • 특정한 기능을 분리해서 계속 재사용이 가능하게 하기 위해
  • 프로그램/코드를 읽기 쉽게 하기 위해 (가독성을 좋게 한다고 합니다)

위와 같은 이유로 전체적으로 프로그램을 관리하기 쉬워지고 작동 효율이 높아지죠.
특정한 기능이 보통 하나의 함수로 되어 있고, 하나의 오브젝트는 하나 이상의 함수를 가지고 있으면서 여러 가지 기능을 수행합니다.

함수를 얼마나 효율적으로 잘 구성하느냐에 따라 프로그램이 효율적이고 안정적으로 돌아가는가를 결정하게 됩니다.
보통 그러려면 앞에 튜토리얼에서 열심히 연습했던 반복이나 조건 분기를 최소화하면서 알고리즘을 만드는 연습을 열심히 해야겠죠?

 

그리고, 그런 단위 기능이 모이고 모이면 아예 프로그램에서 떼어내서 하나의 덩어리를 만들 수 있습니다.

나중에 재사용할 수 있게 만들어놨다가 적당하게 새 프로그램에 다시 붙여서 쓸 수도 있고,

아예 독립시켜 놨다가 연결만 해서 불러다 쓰게 만들 수도 있습니다.

이런 것들을 모듈(module) 혹은 라이브러리(library)라고 부릅니다.

 

많은 프로그래밍 언어들이 그 언어에서 가장 기본적으로 필요한 기능들을 표준 라이브러리나 모듈의 형태로 미리 구현해 뒀다가

개발자들이 그것들을 연결한 뒤 안에 있는 기능들을 가져다 쓰도록 구현을 해 놓았습니다.

엔트리의 블록들도 말하자면 그런 것이라고 이해하시면 되시겠습니다. 

 

이미지, 음악 - 리소스와 애셋

그 외에 엔트리에는 여러 가지 붙여서 사용할 수 있는 블록들이 있습니다.

하지만, 이 포스팅 시리즈는 엔트리 사용법을 익히기 위한 것이 아니니 여기서 따로 다루지는 않도록 하겠습니다.

 

저것들 한 칸 한 칸이 단독 시리즈급

 

정작 여기서 말씀드리려고 하는 것은, 위쪽 탭에 관련된 것입니다.
블록 탭 말고 옆에 있는 '모양'과 '소리' 탭인데요. 각각 오브젝트에 사용될 이미지와, 소리에 사용될 사운드를 작성하는 탭입니다.

 

모양은 이렇게 생겼고
소리는 이렇게 생겼습니다

 

 

우리가 개발하는 프로그램 중 애플리케이션(application)이란 것들을 많이 들어보셨을 텐데요.

요즘은 말이 길기 때문에 흔히 앱(app)으로 줄여서 말하죠. (서로 다른 말 아닙니다 ^^)

 

'스마트폰이나 컴퓨터 따위의 운영 체제에서 사용자의 편의를 위하여 개발된 다양한 응용 프로그램'

 

을 말한다고 표준국어대사전에서는 설명하고 있습니다.

이런 앱에는 반드시라고 할 만큼 사용자에게 보여주기 위한 여러 가지 그래픽 요소나 사운드 요소들을 가지고 있는데요,

흔히 리소스(resource)라고 부르기도 하고, 어떤 경우는 애셋(asset)이라고 부르기도 합니다.

 

앱의 실행 파일에 모두 포함되어 부르는 속도를 빠르게 할 때는 리소스 형태로 사용하지만,

용량이 크기 때문에 외부 데이터 형태로 존재하다가 실행할 때 불러서 사용하는 애셋 형태로 사용하는 경우도 많습니다.

엔트리에서는 오브젝트와 블록의 형태로 직접 사용하기 때문에 어지간하면 모두 리소스로 보시는 것이 좋겠죠.

 

이제 이 정도면 여러분이 엔트리를 통해 알 수 있는 프로그래밍의 기본적인 구조는 개략적으로 알려드린 것 같습니다.

 

다음 이야기

원래 계획은 엔트리 이야기를 마무리 지으면서, 다음에 중요하게 연결할 이야기가 있었습니다.

지난 포스팅에서 비동기 라고 하는 녀석에 관한 얘기가 있었죠.
이 이야기가 사실 엔트리에서 다음 프로그래밍 쪽으로 확장할 이야기였는데요.

 

이쪽 이야기를 정리하다 보니 말을 풀어내기가 어렵기도 하고, 할 말도 적지 않았습니다.

프로그래밍을 공부하시는 많은 분들이 장벽을 느끼시는 지점이 바로 이 부분이기도 하고,

어떤 분들은 장벽인 줄 모르고 무심결에 지나쳤다가, 실전에서 문제에 부딪치고 나니 이 문제인 것을 깨닫거나 하는 식으로 말이죠.

해서 또 식언(食言)을 하는 꼴이 되었습니다만, 이 부분은 제가 다음 주 월요일 포스팅에 상세히 얘기해 보도록 하겠습니다.

 

왜 내일이 아니냐고요?

지난 주말에도 그랬지만, 역시 제가 가정이 있어서 주말은 제가 원하는 만큼 시간을 내기가 어렵더군요.

이 주제는 제가 주말에 시간을 내서 말을 이을 수 있을 만큼 만만한 이야기가 아니기 때문에,

주말에는 지금까지 했던 이야기를 정리도 다시 한번 하는 시간도 갖고,

지금까지 했던 이야기와 관련 없는 개발 번외 편 이야기도 한 번 하도록 하겠습니다.

 

엔트리는 아이들이 가지고 노는 교육용 프로그래밍 언어... 아니, 코딩 툴에 지나지 않는다고 많이들 생각하고 계실 겁니다.

사실 저도 이전에는 그런 편견이 없잖아 있었습니다.

더군다나, 스크래치라는 국제적이고 더 오래된 선배 언어가 있었기 때문에, 무언가 짝퉁이라는 편견도 있었죠.

 

하지만, 실제로 만져보다 보면 엔트리는 엔트리 나름의 가지고 노는 재미가 쏠쏠했습니다.

보시듯, 최신 트렌드를 반영하듯 제한적이지만 인공지능이나 하드웨어 제어를 손쉽게 연결할 수 있는 수단도 제공하려고 하고,

그를 위한 각종 예제도 많이 제공하고 있습니다.

 

엔트리가 반드시 어린 연령층을 위한 교육용 프로그래밍 언어가 아닌,

프로그래밍에 대한 개념이 없는 사람이 처음 개념을 접해서 그 개념의 기초를 잡고,

그 개념을 바탕으로 우리가 현재 개발 현장에서 많이 쓰고 있는 프로그래밍 언어를 배우고 이해하는 데 밑거름이 될 수 있으면 합니다.

 

저도 덕분에, 이번에 한 수 배워 갑니다.

갑자기 이런 거 한다고 일 내팽개치면 안될텐데 말이죠(...)