UEFN에서 Verse에 액세스하는 방법을 알았으니 다음 단계는 기초 프로그래밍 용어를 잘 이해하는 것입니다.
이 수업은 정말 기초적인 것부터 시작합니다. 이미 아는 용어라도 잠깐의 시간을 투자해 복습해 주세요. 이후 수업에서 앞선 수업의 내용을 언급할 때가 있으니, 맥락과 각 수업의 연속성을 이해해 두면 도움이 됩니다.
프로그램이란
프로그램 은 컴퓨터가 특정 작업을 수행하도록 설명하는 인스트럭션의 모음입니다. 프로그램은 컴퓨터에게 입력(들어오는 정보)을 받고 출력(나가는 정보)을 반환 하는 방법을 설명합니다.
Verse
Verse 는 비디오 게임과 시뮬레이션을 염두에 두고 설계된 프로그래밍 언어입니다. 그래서 게임의 필요 사항에 잘 맞습니다.
Verse 프로그램이 하는 일
Verse 프로그램은 문제를 해결합니다.
하지만 컴퓨터는 문자 그대로만 작동합니다. 지니와 계약할 때처럼 정확하게 설명한 대로만 작동합니다. 정확하게 만요.
프로그래머가 정확한 인스트럭션을 입력하지 못하고 어떤 일이 일어날 것이라고 추정하면 오류가 발생합니다.
컴파일
프로그램은 인간이 이해할 수 있도록 작성됩니다. 하지만 컴퓨터가 프로그램을 읽으려면 컴퓨터가 이해할 수 있도록 프로그램을 변환해야 합니다.
이를 위해 인간이 읽을 수 있는 언어 에서 기계어 로 프로그램을 컴파일(compile) 하는 컴파일러(compiler) 를 사용합니다.
알고리즘
알고리즘(algorithm) 은 문제를 해결하거나 작업을 완료하기 위해 작성된 인스트럭션 세트입니다. 프로그램의 작동 방식을 나타내는 모델이라고 생각하면 됩니다.
고양이에게 밥을 줄 시간이 되었나요? 고양이에게 밥을 주는 알고리즘은 다음과 같습니다.
- 선반에서 고양이 밥을 가져온다.
- 고양이 밥그릇을 가져와 식탁 위에 놓는다.
- 그릇 옆에 숟가락을 놓는다.
- 고양이 밥 캔을 연다.
- 숟가락을 사용해 고양이 밥을 그릇에 담는다.
- 고양이가 먹을 수 있는 곳에 그릇을 놓는다.
- 12시간을 기다린 후 반복한다.
이 과정에서 한 단계라도 빠뜨리면 고양이는 밥을 먹지 못합니다. 모든 단계를 순서대로 진행하면 고양이는 배불리 먹고 행복해집니다.

고양이가 밥을 먹었습니다!
반복되는 알고리즘을 루프 라고 합니다.
고양이는 매일 두 번 밥을 먹습니다. 이 프로세스는 루프에 있으며, 중단될 때까지 계속 반복됩니다. (프로세스가 실패하면 고양이가 큰 소리로 보고할 것입니다.)
포크리에서 장치를 통해 게임 메카닉을 만들 때 알고리즘을 구성하게 됩니다. 어떻게 해야 플레이어가 게임의 목표를 달성할 수 있을까요? 어떤 장치가 게임플레이를 진전시킬까요? 어떤 장치가 진전을 방해할까요? 잘못된 장치를 사용하거나 잘못된 순서로 장치를 사용하면 어떻게 될까요?
Verse 프로그래밍은 알고리즘을 컴퓨터가 이해할 수 있는 인스트럭션으로 변환하여 게임 메카닉을 생성하기에 아주 좋은 방법입니다. Verse를 익히면 빠르고 즐겁게 프로그래밍할 수 있으며, 포크리에서는 만들 수 없던 메카닉도 만들 수 있습니다.
알고리즘 테스트하기
목마르신가요? 알고리즘이 현실에서 어떻게 작동하는지 알아보겠습니다.
- 차나 커피를 한 잔 준비하는 알고리즘을 작성해 보세요.
- 작성한 알고리즘을 정확히 따라서 음료를 준비해 보세요.
- 준비한 차를 맛보았을 때, 맛있는 차가 만들어졌나요?
- 만들어졌다면 알고리즘이 완성된 것입니다.
- 만들어지지 않았다면 각 단계를 디버깅해 빠뜨렸거나 부정확하게 작성한 단계를 찾습니다.
- 반복작업(Iterate) (하나 이상의 디자인 변경사항으로 반복)을 계속하면서 완벽한 한 잔을 구합니다.

소스 코드와 기계어 코드
소스 코드(source code) 또는 코드(code) 는 프로그래머가 작성한 프로그램입니다. 프로그램의 소스 에 해당하는 버전을 작성한 것이기 때문에 소스 코드 라고 불립니다. 프로그램을 컴퓨터가 이해할 수 있도록 컴파일 한 것은 기계어 코드(machine code) 라고 합니다.
코드 와 프로그램 이 서로 바꿔 쓰이기도 하고, 프로그래머 는 코더 라고 불리기도 합니다.
실행
컴퓨터가 프로그램에서 단계를 수행할 때 그 프로그램을 실행(run 또는 execute) 한다고 합니다. 코드가 예상대로 실행되지 않거나 컴파일에 실패한다면, 코드에 오류 가 있는 것입니다.
코드 내 오류
코드 내 오류는 두 가지로 분류됩니다.
- 컴파일러 오류(Compiler errors) 는 컴퓨터가 이해할 수 있는 언어로 코드를 컴파일하지 못할 때 발생하는 오류입니다.
- 버그(bug) 는 프로그램이 성공적으로 컴파일되었지만, 예상대로 실행되지 않을 때 발생하는 오류입니다.
컴파일러 오류
컴파일러 오류의 가장 흔한 원인은 부정확한 구문(syntax) 입니다. ( 버그 에 대해서는 잠시 후에 이야기하겠습니다.) 모든 프로그래밍 언어는 구문 이라는 정확한 규칙의 모음을 따릅니다. (프로그램에 따라 규칙은 달라질 수 있으나, 이 수업에서는 Verse의 구문에 집중하겠습니다.)
컴파일러가 프로그래머의 인스트럭션을 이해하고 컴파일할 수 있도록 단어와 기호가 결합하는 방식 을 구문이라고 합니다.
구문은 코드에 사용할 수 있는 단어와 기호를 정의하고, 컴파일러가 성공적으로 컴파일하려면 단어와 기호가 어떻게 와야 하는지를 정의합니다.
영어에서는 주어가 먼저 오고 동사가 따라오는 주어(명사) | 동사 형태가 일반적인 구문입니다. 'Kitty sleeps' 라는 문장은 이 구문 규칙을 따릅니다. 하지만 'Sleeps kitty' 라는 문장을 보면 누군가는 이상하다고 생각할 것입니다. 프로그래밍 언어에서는 더욱 그렇습니다. 수업을 시작할 때 언급했던 지니와의 계약을 기억하시나요?

지니와의 계약을 기억하시나요?
Verse 코드는 대소문자를 구분합니다. 즉 대문자로 써야 할 것을 소문자로 썼거나 소문자로 써야 할 것을 대문자로 쓴 경우, Verse는 이를 구문 오류로 취급하며 코드가 컴파일되지 않습니다. 또한 띄어쓰기를 구문에 표시된 대로 사용하는 것도 중요합니다.
| 구문이 정확한 표현식 | 구문이 부정확한 같은 표현식 |
|---|---|
Print("Hello, world!") |
Print("Hello, World!" |
두 번째 예시에서는 닫는 ) 가 없어 컴파일러 오류가 발생합니다.
구문 오류가 있으면 코드를 성공적으로 컴파일할 수 없으므로 구문 오류는 컴파일러 오류 입니다.
버그
프로그램이 실행되지만 이상하거나 예상하지 않은 방식으로 작동하는 것을 버그라고 합니다.
구문은 단어와 기호 및 그 결합 방식에 대한 것이지만, 시맨틱 은 그 코드가 실제로 무엇을 의미 하는지에 대한 것입니다.
예를 들어 영어의 기본적인 문장은 주어와 동사로 이루어집니다. 주어는 누가 또는 무엇이 를 의미하며, 서술어는 주어(명사)가 무엇을 하거나 무엇인지 를 의미합니다.
주어(명사) | 동사 (구문)은 Kitty sleeps (시맨틱)의 의미와는 관련이 없습니다.
그리고 코드의 의미 에 오류가 있으면 버그 가 생길 수 있습니다.
| 올바른 표현식 | 버그가 있는 같은 표현식 |
|---|---|
|
|
두 번째 예시는 MiceCaught 가 1 보다 커야 Print("Win!") 표현식이 실행되므로 버그가 있습니다.
이를 확인하는 다른 방법은 프로그램이 실행될 때 어떤 일이 일어나는지 지켜보는 것입니다. 예상한 결과가 나오나요? 아니면 무언가 잘못되었나요?
오른쪽 예시에서는 플레이어가 쥐를 한 마리 잡아도 승리하지 못합니다. 코드에서는 잡은 수가 1보다 커야 승리한다고 되어 있기 때문입니다. 잡을 수 있는 쥐가 한 마리뿐이라면 절대 승리할 수 없습니다. 따라서 프로그램이 제대로 컴파일되어도, 여러분이(또는 플레이어가) 원하는 결과가 나오지 않을 수 있습니다.
요약
- 프로그램(program) 은 컴퓨터에 정보를 입력(input) 및 출력(output) 하는 방법을 결정함으로써 할 일을 지시합니다.
- 컴퓨터는 아주 리터럴(literal) 하므로 정확하게 지시한 대로 움직입니다. 설령 잘못된 지시를 내려도 그렇습니다.
- 프로그램은 컴파일 되어야 인간 언어를 컴퓨터 언어로 바꿀 수 있습니다.
- 알고리즘 은 프로그램의 작동 방식을 나타내는 모델입니다.
- 소스 코드 는 인간이 읽고 쓰는 코드입니다. 기계어 코드 는 컴퓨터가 이해하고 실행 하는 코드입니다.
- 시맨틱 은 코드의 의미입니다.
- 구문 은 코드 작성 규칙의 모음입니다.
- 컴파일러 오류 가 있으면 프로그램이 컴파일되지 못합니다.
- 버그 는 프로그램이 성공적으로 컴파일되었지만, 예상대로 실행되지 않을 때 발생하는 오류입니다.