루아 시작하기
목차
루아는 동적 타이핑 언어로 다른 언어를 배운 적이 있다면 학습시간이 단축됩니다. 루아를 첫 프로그래밍의 언어로 시작한다면 그것도 괜찮은 선택입니다.
그럼 루아를 설치하는 것 부터 시작합니다.
루아는 인터프리터에서 사용할 수도 있고 소스코드를 .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) 는 루아 인터프리터가 사용하기로 예약되있는 단어들입니다. 대부분 문법에 사용되는 단어들이니 역시 식별자로 사용할 수 없습니다.
and | break | do |
else | elseif | end |
false | for | function |
goto | if | in |
local | nil | not |
or | repeat | return |
then | true | until |
while |
루아는 대소문자를 구분합니다. 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
기존 언어들에 익숙하다면 약간 이해가 가지 않는 방식이지만 루아는 이렇습니다.
요약
루아 시작 튜토리얼을 알아봤습니다. 전체를 간략하게 훑어본 것이고 세부 사항은 각 챕터에서 알아보겠습니다.