이전 글에서 ‘Hello, World!’를 통해 Lua 코드를 작성하고 실행하는 기본적인 흐름을 경험했습니다. 이제는 Lua라는 언어로 더 의미 있는 소통을 하기 위해, 그 언어의 ‘문법’과 ‘어휘’를 배울 차례입니다.
프로그래밍에서 문법(Syntax)은 컴퓨터(Lua 인터프리터)가 우리의 명령을 정확히 이해하도록 지켜야 할 규칙과 같습니다. 데이터 타입(Data Types)은 프로그램이 다룰 정보의 종류(숫자, 글자, 참/거짓 등)를 의미합니다. 이 두 가지를 명확히 이해하는 것은 앞으로의 모든 Lua 프로그래밍 여정에서 가장 튼튼한 기초가 될 것입니다.
Lua 코드의 기본 규칙: 문법 살펴보기
Lua는 문법이 비교적 간결하여 배우기 쉽다는 장점이 있습니다. 코드를 구성하는 핵심적인 규칙들은 다음과 같습니다.
이름 짓기 (식별자와 키워드)
변수, 함수 등 코드의 여러 요소에 붙이는 고유한 이름을 식별자(Identifier)라고 합니다. 식별자를 만들 때는 몇 가지 규칙이 있습니다.
- 알파벳, 숫자, 밑줄(
_
)로만 구성할 수 있습니다. - 숫자로 시작할 수 없습니다.
- 대소문자를 구분합니다. (
name
과Name
은 서로 다른 식별자입니다.) - Lua가 특별한 용도로 예약해 둔 키워드(Keyword)는 이름으로 사용할 수 없습니다.
-- 올바른 식별자 예시
local user_name = "Alice"
local score1 = 100
-- 잘못된 식별자 예시
-- local 1st_place = "Gold" -- 숫자로 시작할 수 없음
-- local user-name = "Bob" -- 하이픈(-)은 사용할 수 없음
-- local if = 10 -- 'if'는 키워드임
다음은 Lua의 키워드 목록입니다. 이 단어들은 제어문, 함수 정의 등 언어의 핵심 기능을 위해 예약되어 있습니다.
and
,break
,do
,else
,elseif
,end
,false
,for
,function
,goto
,if
,in
,local
,nil
,not
,or
,repeat
,return
,then
,true
,until
,while
코드의 논리적 단위 (코드 블록과 end
)
Lua에서 if
조건문, for
/while
반복문, function
함수 정의 등은 여러 줄의 코드를 하나의 논리적인 덩어리, 즉 코드 블록(Code Block)으로 묶습니다. 이러한 블록은 항상 end
키워드로 그 끝을 명시해주어야 합니다.
local score = 85
if score >= 80 then -- if 블록 시작
print("B 등급입니다.") -- 이 코드가 실행됨
end -- if 문의 끝을 반드시 명시
local count = 0
while count < 3 do -- while 블록 시작
print("카운트: " .. count)
count = count + 1
end -- while 루프의 끝을 반드시 명시
기타 문법 규칙
- 주석 (Comments): 코드에 대한 설명을 남기거나 특정 코드 라인을 잠시 비활성화할 때 사용합니다. Lua 인터프리터는 주석을 무시합니다.
- 한 줄 주석:
--
부터 그 줄의 끝까지 - 여러 줄 주석:
--[[
로 시작해서]]
로 끝남
- 한 줄 주석:
- 세미콜론 (Semicolons): Lua는 문장의 끝에 세미콜론(
;
)을 붙일 필요가 없습니다. 보통 한 줄에 하나의 문장을 작성하는 것이 일반적입니다. - 대소문자 구분 (Case Sensitivity): Lua는 대소문자를 엄격하게 구분합니다. 키워드는 모두 소문자이며, 변수명
myVar
와myvar
는 완전히 다른 변수로 취급됩니다.
Lua가 다루는 데이터의 종류: 8가지 데이터 타입
Lua는 동적 타입 언어(Dynamically Typed Language)입니다. 이는 변수를 만들 때 데이터의 타입을 미리 지정할 필요가 없다는 뜻입니다. 변수의 타입은 실행되는 시점에 할당되는 값에 따라 자동으로 결정됩니다.
현재 변수나 값이 어떤 타입인지 확인하고 싶을 때는 내장 함수인 type()
을 사용하면 편리합니다.
local data = 10 -- 이 시점에서 data는 number 타입
print(type(data)) -- 출력: number
data = "Hello" -- 이제 data는 string 타입으로 변경됨
print(type(data)) -- 출력: string
Lua에는 총 8가지 기본 데이터 타입이 있습니다.
1. nilnil
타입은 오직 nil
이라는 값 하나만 가집니다. ‘값이 없음’ 또는 ‘유효하지 않은 상태’를 나타낼 때 주로 사용됩니다. 선언만 하고 값을 할당하지 않은 변수는 기본적으로 nil
값을 가집니다.
local a
print(type(a)) -- 출력: nil
local user = { name = "Alice" }
user = nil -- 변수에 nil을 할당하여 참조를 제거
print(type(user)) -- 출력: nil
2. boolean
논리적인 참(true
) 또는 거짓(false
)을 나타내는 타입입니다. 조건문에서 가장 핵심적인 역할을 합니다. Lua에서는 false
와 nil
을 제외한 모든 값을 조건식에서 참으로 간주합니다. (숫자 0
이나 빈 문자열 ""
도 참으로 취급)
local isReady = true
local hasError = false
print(type(isReady)) -- 출력: boolean
if 0 then
print("Lua 조건문에서 숫자 0은 true입니다.")
end
3. number
모든 종류의 숫자 값을 나타냅니다. Lua는 내부적으로 정수(integer)와 소수(floating-point number)를 구분하여 효율적으로 처리하지만, 개발자 입장에서는 모두 동일한 number
타입으로 다룰 수 있습니다.
local integerValue = 100
local floatValue = 3.14
print(type(integerValue)) -- 출력: number
print(type(floatValue)) -- 출력: number
4. string
문자들의 나열, 즉 텍스트 데이터를 나타냅니다. 작은따옴표('
) 또는 큰따옴표("
)로 감싸서 만들 수 있습니다. 대괄호 두 개([[
… ]]
)를 사용하면 여러 줄에 걸친 문자열도 쉽게 작성할 수 있습니다.
local message = "그녀가 말했다: \"Lua는 재밌어요!\""
local poem = [[
장미는 붉고,
제비꽃은 파랗고,
Lua는 배우기 쉽다네.
]]
print(message)
print(poem)
5. function
실행 가능한 코드의 묶음, 즉 함수 자체도 하나의 데이터 타입입니다. Lua에서 함수는 일급 객체(First-class Citizen)로 취급되어, 변수에 담거나 다른 함수의 인자로 전달하는 등 자유롭게 다룰 수 있습니다.
local function greet(name)
return "Hello, " .. name
end
print(type(greet)) -- 출력: function
local myFunc = greet
print(myFunc("World")) -- 출력: Hello, World
6. table
Lua에서 가장 중요하고 강력한 데이터 구조입니다. 테이블은 키(key)와 값(value)으로 이루어진 연관 배열(associative array)입니다. 이를 이용해 다른 언어의 배열, 리스트, 맵, 딕셔너리, 객체 등 거의 모든 종류의 데이터 구조를 표현할 수 있습니다. 중괄호 {}
를 사용하여 만듭니다.
-- 배열처럼 사용
local numbers = {10, 20, 30}
print(numbers[1]) -- 출력: 10 (Lua의 배열 인덱스는 1부터 시작)
-- 딕셔너리(맵)처럼 사용
local user = { name = "Bob", age = 25 }
print(user.name) -- 출력: Bob
print(user["age"]) -- 출력: 25
7. userdata
C/C++와 같은 다른 언어로 작성된 데이터를 Lua에서 다룰 수 있게 해주는 특별한 타입입니다. 주로 외부 라이브러리와 연동할 때 사용되며, Lua 코드에서 직접 생성하는 경우는 드뭅니다.
8. thread
Lua의 동시성 처리 모델인 코루틴(Coroutine)을 나타내는 타입입니다. 운영체제의 스레드와는 다른 개념으로, 하나의 스레드 내에서 여러 실행 흐름을 협력적으로 제어할 때 사용됩니다.
이번 글에서는 Lua 코드를 작성하는 데 필요한 기본 문법 규칙들과, Lua가 다루는 8가지 데이터 타입을 자세히 살펴보았습니다.
- 문법: 식별자, 키워드, 주석,
end
키워드로 닫는 코드 블록 등 Lua의 ‘문장 규칙’을 익혔습니다. - 데이터 타입: 동적 타이핑의 개념을 이해하고
nil
,boolean
,number
,string
같은 기본 타입부터 Lua의 핵심인table
과function
까지 알아보았습니다.