루아 시작하기 | 루아 프로그래밍 2

루아 시작하기

루아 시작하기

루아는 동적 타이핑 언어로 다른 언어를 배운 적이 있다면 학습시간이 단축됩니다. 루아를 첫 프로그래밍의 언어로 시작한다면 그것도 괜찮은 선택입니다.

그럼 루아를 설치하는 것 부터 시작합니다.

루아는 인터프리터에서 사용할 수도 있고 소스코드를 .lua 파일에 저장하여 인터프리터를 호출하는 방식으로 사용할 수도 있습니다.

먼저 명령 프롬프트에서 lua 를 입력하여 인터프리터를 사용해보겠습니다.

C:\Users\masterkay>lua
Lua 5.4.2  Copyright (C) 1994-2020 Lua.org, PUC-Rio
> print("Hello Lua!")
Hello Lua!
> 3+4
7
>

print 문으로 출력을 해보고 숫자 연산을 해봅니다. 인터프리터(번역기)는 명령어를 받으면 즉시 실행합니다. 스크립트는 셸에서 실행시킨 결과값을 바로 볼 수 있기 때문에 학습하기가 쉽습니다.

인터프리터를 종료하려면 Ctrl+Z (윈도우)를 하거나 os.exit() 함수를 호출합니다.

사칙연산

> 7+3
10
> 10-5
5
> 3*7
21
> 9/2
4.5
>

인터프리터에서 사칙연산을 해봅니다. 마치 계산기 처럼 사용할 수 있습니다. 긴 수식도 잘 계산이 됩니다.

+, -, *, / 는 더하기, 빼기, 곱하기, 나누기 입니다. 여기에 연산자가 하나 더 있습니다. ^는 제곱 연산자입니다. 예를 들어 3^2 = 9.0 입니다. 다른 언어와 연산자 기호가 다르니 주의해서 구분합니다.

> 3 + 5 - 3 * 7
-13

인터프리터에서 파일을 실행시키는 방법도 있습니다. 이 방법은 파일을 실행 후 인터프리터 모드를 유지하기 때문에 디버깅을 하기좋습니다.

> dofile("myFirst.lua")
test

식별자와 키워드(예약어)

루아의 변수를 지을 때의 규칙은

영문, 숫자, 언더바 _ 사용가능하며 숫자로 시작하지 않습니다.

인터프리터 상에서 변수를 만들어 봅니다.

> a = 2
> a10 = 3
> _a = 'a string'
> a
2
> a10
3
> _a
a string

키워드(keyword) 혹은 예약어 (reserved word) 는 루아 인터프리터가 사용하기로 예약되있는 단어들입니다. 대부분 문법에 사용되는 단어들이니 역시 식별자로 사용할 수 없습니다.

andbreakdo
elseelseifend
falseforfunction
gotoifin
localnilnot
orrepeatreturn
thentrueuntil
while
reserved

루아는 대소문자를 구분합니다. for 와 For FOR 는 다른 식별자로 취급하죠.

주석(Comment)

루아의 주석은 — 를 사용합니다. C계열의 // 와는 다른 스타일이죠.

다음은 한줄 주석입니다.

-- print("Comment");
print("After Statement"); -- Comment

주석문은 .lua 소스파일에 코드의 유지보수에 관련한 사항을 기록하기 위해 사용합니다.

다음은 멀티라인 주석입니다. –[[ 코드 ]]– 와 같이 감싸고 있습니다.

--[[
print(99) -- no action (commented out)
--]]

이 상태에서 – 를 하나 더 추가하면 이 코드를 작동시킬 수 있습니다. 여러줄을 주석으로 묶어놓고 마치 키를 여는 것 처럼 사용할 수 있습니다. 이 부분은 다른 언어의 주석과 차별화된 기능입니다.

---[[
    print(99) --> print 99 on console
    --]]

문장 구분자(세미콜론)

루아에서 문장을 구분하기 위해서 세미콜론을 명시할 필요는 없습니다.

컴파일러가 소스코드의 라인을 기준으로 문장을 구분할 수 있기 때문이죠. 하지만 세미콜론 ; 을 사용해도 됩니다. 한 줄에 두개의 문(statement)을 써야할 때는 구분해주는 게 좋습니다. 루아의 개발자 호베르투는 그의 저서에서 한줄에 두개의 문을 쓰지 않으면 세미콜론을 사용하지 않는다고 합니다.

b = 2 -- that's okay. no semicolon
c = 3; -- semicolon is a separator

b = 2; c = 3; -- separator explicit

b = 2 c = 3 -- working but ugly

전역변수와 닐(NIL)

전역변수는 초기화되지 않아도 인터프리터에서 사용할 수 있습니다.

> b
nil
> print(b)
nil
>

nil 은 루아에서 none value, null 같은 값입니다. 값이 초기화가 안되어 있다는 것을 표현합니다.

보통 none, NULL 등이 미확정 상황을 표현할 때 사용되는데요.

루아에서의 nil 이란 단어가 새롭게 느껴집니다. 루아에서는 nil 도 하나의 타입입니다.

루아의 8가지 타입

루아는 동적 타이프(dynamically-typed) 언어입니다. 변수의 자료형을 정의할 필요는 없습니다. 루아 인터프리터에서 내부적으로 결정한 타입이 주어집니다.

8가지 타입은 nil, Boolean, number, string, userdata, function, thread, and table 입니다. C++이나 자바같이 정적 타이프 언어를 다뤄봤다면 뭔가 다르다는 것을 느낄 수 있습니다.

일단 도입부니까 소개만 하고 넘어가겠습니다. type ( ) 함수는 타입의 이름을 문자열로 반환합니다.

> type(nil)
nil
> type(true)
boolean
> type(7 * 2)
number
> type("Hello world")
string
> type(io.stdout)
userdata
> type(print)
function
> type(type)
function
> type({})
table
> type(type(X))
string

불린형(Boolean)

불린형은 true / false 두가지 값을 갖습니다. 참과 거짓을 판단하는데 사용하는 타입이죠.

그런데 기존 언어들과 비교하여 루아는 불린을 사용하는 방법이 약간 다릅니다.

> not nil
true
> not false
true
> not 0
false
> not 1
false
> not not 1
true
> not not nil
false

nil 과 false는 같은 false의 의미를 갖습니다. 이 밖에는 다 true 입니다. 0같은 경우 C계열에서는 false 인데 루아에서는 true 입니다.

and 연산자의 사용방식도 차이가 있는데요. 첫번째 피연산자가 false 이면 그 피연산자의 값을 반환합니다.

> false and 10
false
> nil and 7
nil
> 3 and 7
7
> 2 and 10
10

or 연산자는 and 연산자와 반대입니다. 첫번째 피연산자가 false 가 아닐 때 그 피연산자의 값을 반환합니다.

> false or 10
10
> nil or 7
7
> 3 or 7
3
> 2 or 10
2
> 0 or false
0

기존 언어들에 익숙하다면 약간 이해가 가지 않는 방식이지만 루아는 이렇습니다.

요약

루아 시작 튜토리얼을 알아봤습니다. 전체를 간략하게 훑어본 것이고 세부 사항은 각 챕터에서 알아보겠습니다.

외부 참조 문서

Lua: documentation

Programming in Lua 루아 시작하기

Leave a Comment