Menu
Coddy logo textTech

Lua 치트시트

마지막 업데이트

Hello World 및 코드 실행

Lua는 간결합니다 - 한 문장이면 실행됩니다.

작업문법
한 줄 출력print("Hello, World!")
여러 값 출력print("x", 1, true)
줄바꿈 없이 쓰기io.write("Hi")
주석-- this is a comment
여러 줄 주석--[[ ... ]]
문자열 연결print("Hi " .. name)
파일 실행lua app.lua
대화형 셸lua

변수 및 타입

변수는 기본적으로 전역이며, local로 지역 변수를 선언합니다.

작업문법
지역 변수local age = 30
전역 변수count = 0
다중 할당local a, b = 1, 2
여덟 가지 타입nil, boolean, number, string, table, function, userdata, thread
nil / 불리언nil, true, false
타입 확인type(x)"number"를 반환
숫자로 변환tonumber("42")
문자열로 변환tostring(42)

문자열

문자열은 불변이며, 작은따옴표와 큰따옴표 모두 동작합니다.

작업문법
길이#s 또는 string.len(s)
연결s1 .. s2
대문자 / 소문자s:upper(), s:lower()
부분 문자열s:sub(1, 3)
부분 문자열 찾기s:find("ell")
치환 (gsub)s:gsub("a", "b")
서식 지정string.format("%05d", 42)
긴 문자열[[ multi\nline ]]

테이블 (핵심 자료 구조)

테이블은 Lua의 유일한 구조화 타입입니다 - 배열, 맵, 객체 역할을 합니다.

작업문법
빈 테이블local t = {}
배열 스타일 (1부터 시작)local t = {10, 20, 30}
배열 원소 접근t[1] (첫 번째 원소)
맵 스타일 테이블local u = {name = "Ada", age = 30}
맵 값 접근u.name 또는 u["name"]
값 설정t[4] = 40, u.email = "a@x.com"
배열 부분의 길이#t
배열 순회 (ipairs)for i, v in ipairs(t) do ... end
모든 키 순회 (pairs)for k, v in pairs(u) do ... end
중첩 테이블local m = {a = {1, 2}}

제어 흐름

블록은 end로 닫으며, nil과 false만 거짓입니다.

작업문법
if / elseif / elseif x > 0 then ... elseif x < 0 then ... else ... end
논리 연산자and, or, not
숫자 forfor i = 1, 10 do ... end
스텝이 있는 forfor i = 10, 1, -1 do ... end
while 반복문while x < 100 do ... end
repeat-untilrepeat ... until done
breakbreak
같지 않음 연산자if a ~= b then ... end

함수

함수는 일급 값이며 여러 결과를 반환할 수 있습니다.

작업문법
함수 정의function add(a, b) return a + b end
지역 함수local function square(x) return x * x end
익명 함수local f = function(x) return x * 2 end
여러 반환값function bounds() return 1, 10 end
여러 반환값 캡처local lo, hi = bounds()
가변 인자 함수function sum(...) ... end
가변 인자 수집local args = {...}
메서드 (콜론 문법)function obj:greet() ... end

문자열 라이브러리

문자열 라이브러리의 자주 쓰는 함수 (s:fn() 형태로 호출 가능).

함수기능
string.len(s)문자열의 길이
string.sub(s, i, j)인덱스 i부터 j까지의 부분 문자열
string.upper(s)대문자로 변환한 복사본
string.rep(s, n)문자열을 n번 반복
string.find(s, p)패턴을 찾아 시작/끝 반환
string.match(s, p)첫 패턴 일치 반환
string.gsub(s, p, r)모든 패턴 일치 치환
string.format(fmt, ...)값을 문자열로 서식 지정

테이블 및 수학 라이브러리

배열 스타일 테이블과 숫자를 다루기 위한 도우미.

함수기능
table.insert(t, v)끝에 값 추가
table.insert(t, i, v)위치 i에 v 삽입
table.remove(t, i)i 위치의 원소를 제거하고 반환
table.concat(t, ", ")원소를 문자열로 결합
table.sort(t)배열을 제자리 정렬
math.floor(x) / math.ceil(x)내림 / 올림
math.max(...) / math.min(...)가장 큰 / 작은 인자
math.random(1, 6)범위 안의 임의 정수

메타테이블 (간략히)

메타테이블로 테이블의 동작을 사용자 정의할 수 있습니다 - 연산자, 인덱싱 등.

작업문법
메타테이블 설정setmetatable(t, mt)
메타테이블 가져오기getmetatable(t)
없는 키에 대한 대체mt.__index = defaults
함수를 통한 기본값mt.__index = function(t, k) ... end
덧셈 사용자 정의mt.__add = function(a, b) ... end
tostring 사용자 정의mt.__tostring = function(t) ... end
프로토타입 기반 OOPmt.__index = ClassTable

가장 자주 쓰는 Lua 문법을 한 페이지에 담았습니다. 이 Lua 치트시트는 언어 핵심을 위한 빠른 참조 자료입니다 - 변수와 타입, 문자열, 제어 흐름, 함수, 그리고 Lua의 유일하고 유연한 자료 구조 역할을 하는 테이블을 다루며, 표준 라이브러리와 메타테이블도 살짝 엿봅니다.

여기 나오는 모든 내용은 표준 Lua이며 기본 인터프리터에서 실행됩니다. 필요한 것을 복사하거나, Lua 플레이그라운드에서 모든 코드를 바로 실행해 보세요 - 설치가 필요 없습니다.

Lua 치트시트 자주 묻는 질문

이 Lua 치트시트는 무료인가요?
네. 이 Lua 치트시트는 완전히 무료이며 회원 가입이 필요 없습니다. 즐겨찾기에 추가해 두고 테이블 연산, 문자열 함수, 제어 흐름 키워드를 찾아봐야 할 때마다 다시 방문하세요.
Lua 테이블이 어떻게 배열이면서 동시에 맵이 될 수 있나요?
테이블은 그저 키-값 쌍의 집합이며, 키는 어떤 값이든 될 수 있습니다. 1부터 시작하는 연속된 정수 키({10, 20, 30})를 쓰면 테이블이 배열처럼 동작하고, 문자열 키({name = "Ada"})를 쓰면 맵처럼 동작합니다. 같은 테이블 안에서 둘을 섞을 수도 있습니다. 그래서 Lua는 구조화 타입이 하나만 있으면 됩니다 - 테이블이 배열, 딕셔너리, 셋, 객체를 모두 포괄합니다.
Lua는 왜 1부터 시작하는 인덱싱을 사용하나요?
관례와 설계상 Lua 배열은 0이 아니라 인덱스 1에서 시작합니다 - 그래서 t[1]이 첫 번째 원소이고 #t가 개수입니다. 길이 연산자 #table.insert, ipairs 같은 라이브러리 함수는 모두 이 1부터 시작하는 관례를 전제하므로, 이를 지키면 배열 코드가 기대대로 동작합니다.
Lua를 온라인에서 연습할 수 있나요?
네. Lua 플레이그라운드를 열어 이 치트시트의 어떤 코드든 브라우저에서 실행해 보세요 - Lua 설치가 필요 없습니다. 체계적으로 배우고 싶다면, Coddy의 무료 인터랙티브 Lua 강좌가 변수와 테이블부터 함수와 메타테이블까지 단계별로 안내합니다.
이 치트시트는 초보자에게 적합한가요?
네. 가장 흔한 주제(변수, 문자열, 테이블, 제어 흐름)부터 고급 주제(표준 라이브러리와 메타테이블)까지 순서대로 정리되어 있어, 첫날부터 상단 섹션을 사용하고 점차 나머지로 넓혀갈 수 있습니다.
Coddy programming languages illustration

Coddy로 Lua 배우기

시작하기