Programming
Lua 언어란?
ipxy
2025. 3. 31. 15:00
728x90
🔷 Lua 언어란?
Lua는 1993년 브라질의 PUC-Rio 대학에서 개발된 경량 스크립트 언어입니다. "루아(Lua)"는 포르투갈어로 "달(Moon)"을 뜻하며, 작고 효율적이면서도 유연한 언어로 유명합니다.
✅ 대표적인 특징:
- 가볍다 (Lightweight)
- 빠르다 (Fast)
- 내장하기 쉽다 (Embeddable)
🔶 주요 특징 및 기능 소개
1. ✏️ 간결한 문법
Lua는 문법이 단순해서 배우기 쉽습니다. 복잡한 선언 없이 변수, 함수 등을 간단하게 정의할 수 있습니다.
-- Hello World 예제
print("Hello, Lua!")
2. 🧠 동적 타이핑
변수를 선언할 때 자료형을 명시할 필요 없이, 자동으로 타입을 결정합니다.
x = 10 -- 정수
x = "hello" -- 문자열
3. 📦 테이블 (Table) 기반 자료구조
Lua의 유일한 복합 자료형으로, 배열, 딕셔너리, 객체 등 다양한 용도로 활용됩니다.
person = {
name = "Alice",
age = 30
}
print(person.name)
4. 🔁 반복문과 조건문
기본적인 조건문과 반복문을 지원합니다.
-- for 루프 예시
for i = 1, 5 do
print(i)
end
-- if 문 예시
if x > 0 then
print("Positive")
else
print("Non-positive")
end
5. 🔧 함수(Function) 정의 및 일급 객체
함수는 변수처럼 다룰 수 있어, 고차 함수나 콜백 등도 쉽게 구현할 수 있습니다.
function add(a, b)
return a + b
end
print(add(2, 3))
6. 🧩 C와의 연동 용이
Lua는 C 언어로 구현되어 있으며, C 코드에서 Lua를 호출하거나 Lua에서 C 함수를 호출할 수 있습니다. 이 덕분에 게임 엔진, IoT 디바이스, 임베디드 시스템 등에서 많이 사용됩니다.
언어 타입 | 스크립트 언어, 동적 타이핑 |
주요 자료형 | 숫자, 문자열, 불리언, 테이블, 함수 |
사용 환경 | 게임, IoT, 서버, 스크립팅 |
장점 | 가볍고 빠르며 내장하기 쉬움 |
단점 | 표준 라이브러리 비교적 간단함 |
예제
✅ 1. 모듈(Module) 사용하기
Lua에서는 파일 단위로 모듈을 만들어 사용할 수 있어요.
🔸 mymath.lua (모듈 파일)
local mymath = {}
function mymath.add(a, b)
return a + b
end
function mymath.mul(a, b)
return a * b
end
return mymath
🔹 main.lua (사용하는 쪽)
local mymath = require("mymath")
print(mymath.add(10, 20)) -- 30
print(mymath.mul(3, 5)) -- 15
require는 Lua에서 모듈을 불러오는 기본 방식입니다.
✅ 2. 메타테이블(Metatable) 사용하기
Lua의 테이블은 강력한 기능을 갖춘 자료형인데, 메타테이블을 이용하면 연산자 오버로딩, 상속, 커스텀 동작 등을 정의할 수 있습니다.
🔸 연산자 오버로딩 예제
Vector = {}
Vector.__index = Vector
function Vector.new(x, y)
return setmetatable({x = x, y = y}, Vector)
end
function Vector.__add(a, b)
return Vector.new(a.x + b.x, a.y + b.y)
end
v1 = Vector.new(1, 2)
v2 = Vector.new(3, 4)
v3 = v1 + v2 -- 내부적으로 __add 호출
print(v3.x, v3.y) -- 4 6
✅ 3. 코루틴(Coroutine)
Lua는 경량 스레드인 코루틴을 지원합니다. 비동기 처리나 상태 유지에 유용하죠.
🔸 예제: 상태 유지하는 생성기(generator)
function counter()
local i = 0
return coroutine.create(function()
while true do
i = i + 1
coroutine.yield(i)
end
end)
end
co = counter()
for i = 1, 5 do
local _, val = coroutine.resume(co)
print(val) -- 1, 2, 3, 4, 5
end
✅ 4. 객체 지향 프로그래밍 스타일
Lua에는 클래스 문법이 없지만, 테이블과 메타테이블을 활용하여 OOP 스타일로 작성할 수 있습니다.
🔸 클래스 흉내내기
Person = {}
Person.__index = Person
function Person:new(name, age)
local obj = {name = name, age = age}
setmetatable(obj, self)
return obj
end
function Person:introduce()
print("Hi, I'm " .. self.name .. ", " .. self.age .. " years old.")
end
p1 = Person:new("Alice", 30)
p1:introduce() -- Hi, I'm Alice, 30 years old.
✅ 5. 클로저(Closure)와 함수 반환
Lua는 클로저를 통해 함수 안에서 함수를 만들고 상태를 유지할 수 있습니다.
function makeCounter()
local count = 0
return function()
count = count + 1
return count
end
end
c = makeCounter()
print(c()) --> 1
print(c()) --> 2
🎯 정리
모듈 | 코드 분리와 재사용 | 라이브러리 구성 |
메타테이블 | 사용자 정의 동작 | 연산자 오버로딩, 상속 |
코루틴 | 상태 유지, 비동기 | 생성기, 네트워크 처리 |
OOP 스타일 | 클래스 흉내내기 | 게임 캐릭터, UI 구성 요소 |
클로저 | 상태 있는 함수 | 카운터, 필터링 함수 |
728x90