10분만에 배우는 Lua
Lua는 엄청 가벼운 프로그래밍 언어로, 다른 프로그램에 내장해서 쓰기 딱이야. 알겠어? ‘월드 오브 워크래프트’나 Roblox 같은 게임에서도 쓰고, 설정 파일 스크립트로도 인기 많아.
1. 첫 번째 Lua 프로그램
자, 가장 기본부터 시작해보자. hello.lua
파일 만들고 안에 이렇게 써:
print("Hello, World!")
저장하고 터미널에서 이렇게 실행:
lua hello.lua
그럼 이렇게 나와:
Hello, World!
봐, 엄청 쉽지! print()
는 화면에 글자 보여주는 함수야.
2. 기본 문법
Lua 문법은 진짜 간단해:
-- 이건 한 줄 주석
print("안녕, 세상!")
--[[
이건 여러 줄 주석
몇 줄이든 다 됨
]]
기억할 점:
- 주석: 한 줄은
--
, 여러 줄은--[[ ]]
- 문장: 한 줄에 한 명령, 세미콜론 필요 없어
- 대소문자: 구별하니까 조심
- 공백: 스페이스나 엔터 마음대로
3. 변수와 데이터 타입
Lua는 동적 타입이라 타입 선언 필요 없어:
-- 그냥 대입
이름 = "Lua"
나이 = 25
쩔어 = true
원주율 = 3.14159
-- 한번에 여러 개 대입도 가능
x, y, z = 10, 20, 30
-- 빈 값은 nil
빈변수 = nil
print("이름:", 이름)
print("나이:", 나이)
print("쩔어?:", 쩔어)
Lua 데이터 타입:
- nil: 값 없음
- boolean: true 아니면 false
- number: 숫자 (정수, 실수 다)
- string: 문자열
- table: Lua의 만능 데이터 구조
- function: 함수 (1급 객체)
- userdata: C언어용
- thread: 코루틴
4. 문자열 조작
-- 문자열 만드는 법
str1 = "안녕"
str2 = '세상'
str3 = [[여러 줄
문자열 편함]]
-- 문자열 연결은 ..
메시지 = str1 .. " " .. str2
print(메시지) -- 출력: 안녕 세상
-- 문자열 길이는 #
길이 = #"안녕"
print(길이) -- 출력: 2
-- 문자열 메서드
텍스트 = "hello world"
대문자 = 텍스트:upper()
소문자 = 텍스트:lower()
부분 = 텍스트:sub(1, 5)
print(대문자) -- 출력: HELLO WORLD
print(부분) -- 출력: hello
5. 테이블 - Lua의 만능 컨테이너
테이블은 Lua의 최강 기능:
-- 배열로 쓰기 (인덱스 1부터)
과일 = {"사과", "바나나", "체리"}
print(과일[1]) -- 출력: 사과
print(과일[2]) -- 출력: 바나나
-- 딕셔너리로 쓰기
사람 = {
이름 = "철수",
나이 = 30,
도시 = "서울"
}
print(사람.이름) -- 출력: 철수
print(사람["나이"]) -- 출력: 30
-- 섞어서도 가능
혼합테이블 = {
"사과",
"바나나",
색상 = "빨강",
개수 = 5
}
-- 테이블 조작
과일 = {"사과", "바나나"}
table.insert(과일, "체리") -- 맨 뒤에 추가
table.insert(과일, 2, "오렌지") -- 2번째에 삽입
print(table.concat(과일, ", ")) -- 출력: 사과, 오렌지, 바나나, 체리
6. 제어 구조
-- if문
나이 = 18
if 나이 >= 18 then
print("성인입니다")
elseif 나이 >= 13 then
print("10대입니다")
else
print("어린이입니다")
end
-- while 루프
카운터 = 1
while 카운터 <= 5 do
print("카운트:", 카운터)
카운터 = 카운터 + 1
end
-- for 루프 (숫자)
for i = 1, 5 do
print("숫자:", i)
end
-- for 루프 (스텝 지정)
for i = 10, 1, -2 do
print("카운트다운:", i)
end
-- for 루프 (테이블 순회)
과일 = {"사과", "바나나", "체리"}
for 번호, 과일명 in ipairs(과일) do
print(번호, 과일명)
end
사람 = {이름 = "철수", 나이 = 30}
for 키, 값 in pairs(사람) do
print(키, 값)
end
7. 함수
-- 기본 함수
function 인사(이름)
return "안녕, " .. 이름 .. "!"
end
메시지 = 인사("영희")
print(메시지) -- 출력: 안녕, 영희!
-- 여러返回值
function 계산(a, b)
return a + b, a - b, a * b, a / b
end
합, 차, 곱, 몫 = 계산(10, 5)
print("합:", 합) -- 출력: 합: 15
print("차:", 차) -- 출력: 차: 5
-- 익명 함수 (람다)
곱하기 = function(x, y)
return x * y
end
결과 = 곱하기(4, 5)
print(결과) -- 출력: 20
-- 함수를 인자로
function 연산실행(x, y, 연산)
return 연산(x, y)
end
결과 = 연산실행(6, 7, 곱하기)
print(결과) -- 출력: 42
8. 모듈
코드를 나눠서 작성하자. 수학도구.lua
생성:
-- 수학도구.lua
local 수학도구 = {}
function 수학도구.더하기(a, b)
return a + b
end
function 수학도구.곱하기(a, b)
return a * b
end
return 수학도구
메인 파일에서 사용:
-- 메인.lua
local 수학도구 = require("수학도구")
결과 = 수학도구.더하기(10, 5)
print("더하기 결과:", 결과) -- 출력: 더하기 결과: 15
결과 = 수학도구.곱하기(4, 6)
print("곱하기 결과:", 결과) -- 출력: 곱하기 결과: 24
9. 에러 처리
-- pcall로 에러 잡기
function 위험작동()
error("에러 발생!")
end
-- pcall는 보호 호출
성공, 결과 = pcall(위험작동)
if 성공 then
print("성공:", 결과)
else
print("실패:", 결과)
end
-- 커스텀 에러
function 나누기(a, b)
if b == 0 then
error("0으로 나눌 수 없음")
end
return a / b
end
성공, 결과 = pcall(나누기, 10, 0)
if not 성공 then
print("에러:", 결과)
end
10. 실전 예제
-- 간단 계산기
function 계산기()
print("🐮 간단 계산기")
print("1. 더하기")
print("2. 빼기")
print("3. 곱하기")
print("4. 나누기")
선택 = tonumber(io.read())
print("첫 번째 숫자:")
숫자1 = tonumber(io.read())
print("두 번째 숫자:")
숫자2 = tonumber(io.read())
if 선택 == 1 then
결과 = 숫자1 + 숫자2
print("결과:", 결과)
elseif 선택 == 2 then
결과 = 숫자1 - 숫자2
print("결과:", 결과)
elseif 선택 == 3 then
결과 = 숫자1 * 숫자2
print("결과:", 결과)
elseif 선택 == 4 then
if 숫자2 ~= 0 then
결과 = 숫자1 / 숫자2
print("결과:", 결과)
else
print("❌ 0으로 나눌 수 없음")
end
else
print("🤔 잘못된 선택")
end
end
-- 사용하려면 주석 해제
-- 계산기()
-- 파일 조작
function 파일읽기(파일명)
local 파일 = io.open(파일명, "r")
if not 파일 then
return nil, "파일 열 수 없음"
end
local 내용 = 파일:read("*a")
파일:close()
return 내용
end
내용, 에러 = 파일읽기("예제.txt")
if 내용 then
print("파일 내용:", 내용)
else
print("에러:", 에러)
end
마무리
Lua는 정말好用해! 특히:
- 🎮 게임 스크립트 (많은 게임에서 사용)
- 🔧 임베디드 개발 (가벼워서)
- ⚙️ 설정 파일과 자동화
- 🚀 고성능 needed場合 (LuaJIT와 함께)
Lua의 장점:
- 엄청 가벼움: 용량 작음
- 빠름: LuaJIT로 광속
- 유연함: 동적 타입 + 만능 테이블
- 어디서든 실행: 모바일부터 서버까지
- 내장 쉬움: C/C++과 궁합 최고
더 깊이 배우고 싶다? 이거 해봐:
- Lua 표준 라이브러리
- 코루틴 (동시 프로그래밍)
- 메타테이블과 메타메서드 (OOP 구현)
- Lua와 C 연동
- Love2D 게임 프레임워크
Lua는 배우기 쉽고 기능도 많아. 어서 사용해보자! 🚀