학습
Lua 컬렉션 라이브러리
Lua 컬렉션 라이브러리 — 중급
컬렉션 라이브러리
1. 도입 (왜 배워야 하는가)
Lua에서 컬렉션 라이브러리는 다양한 데이터 구조를 효과적으로 관리하고 다룰 수 있게 해주는 도구입니다. 실무에서는 대량의 데이터를 효율적으로 처리해야 하는 경우가 많기 때문에, 적절한 데이터 구조를 선택하고 활용하는 능력이 매우 중요합니다. 예를 들어, 게임 개발에서는 캐릭터의 상태를 저장하거나, 웹 애플리케이션에서는 사용자의 정보를 관리할 때 컬렉션을 잘 활용해야 합니다.
이 라이브러리를 모른다면 데이터 관리의 복잡성이 증가하게 되고, 불필요한 메모리 사용, 성능 저하 등의 문제를 초래할 수 있습니다. 즉, 잘못된 데이터 구조 선택은 애플리케이션의 전체적인 성능과 유지보수성을 떨어뜨릴 수 있습니다.
2. 핵심 개념 설명
컬렉션은 데이터를 저장하는 컨테이너입니다. Lua에서는 주로 테이블을 이용하여 리스트, 스택, 큐, 맵 등 다양한 컬렉션을 구현할 수 있습니다. 여기서 몇 가지 주요 개념을 살펴보겠습니다.
| 용어 | 설명 |
|---|---|
| 리스트 | 순서가 있는 데이터의 집합 |
| 스택 | 후입선출(LIFO) 방식으로 데이터를 관리 |
| 큐 | 선입선출(FIFO) 방식으로 데이터를 관리 |
| 맵 | 키-값 쌍으로 데이터를 저장하는 구조 |
리스트는 사과, 배, 포도와 같이 순서가 있는 과일 목록과 비슷합니다. 스택은 접시를 쌓아두고 가장 위의 접시를 먼저 꺼내는 것과 같습니다. 큐는 줄을 서서 기다리는 사람들처럼 가장 먼저 온 사람이 가장 먼저 나가는 구조입니다. 맵은 전화번호부처럼 이름에 따라 전화번호를 찾는 방식입니다.
3. 기본 코드 예제
리스트를 사용하는 기본 예제를 살펴보겠습니다.
-- 리스트 생성
local fruits = {"사과", "배", "포도"}
-- 리스트에 새로운 과일 추가
table.insert(fruits, "바나나")
-- 리스트 출력
for i, fruit in ipairs(fruits) do
print(i, fruit)
end
실행 결과
1 사과
2 배
3 포도
4 바나나
코드 한 줄씩 동작 설명
local fruits = {"사과", "배", "포도"}: 과일 이름으로 이루어진 리스트를 생성합니다.table.insert(fruits, "바나나"): 리스트의 끝에 "바나나"를 추가합니다.for i, fruit in ipairs(fruits) do: 리스트의 각 요소를 반복하여 출력하기 위해 루프를 시작합니다.print(i, fruit): 현재 인덱스와 과일 이름을 출력합니다.- Lua의 컬렉션 라이브러리는 데이터 구조를 효율적으로 관리하는 중요한 도구입니다.
- 리스트, 스택, 큐, 맵의 개념을 이해하고 활용할 수 있어야 합니다.
- 실무에서 자주 사용하는 패턴 (장바구니, 대기열 관리 등)을 익혀야 합니다.
- 다음에는 Lua에서 고급 테이블 사용법이나 메타테이블을 학습하는 것도 좋습니다.
4. 실전 활용 예제
예제 1: 쇼핑몰의 장바구니 구현
local cart = {}
function addToCart(item)
table.insert(cart, item)
end
function viewCart()
for i, item in ipairs(cart) do
print(i, item)
end
end
addToCart("티셔츠")
addToCart("바지")
viewCart()
이 코드는 사용자가 장바구니에 티셔츠와 바지를 추가하고, 현재 장바구니의 내용을 출력합니다.
예제 2: 대기열 관리
local queue = {}
function enqueue(item)
table.insert(queue, item)
end
function dequeue()
return table.remove(queue, 1)
end
enqueue("사람1")
enqueue("사람2")
print(dequeue()) -- 사람1
print(dequeue()) -- 사람2
이 코드는 대기열에 사람을 추가하고, 가장 먼저 대기한 사람부터 차례로 제거합니다.
5. 흔한 실수와 주의사항
실수 1: 잘못된 인덱스 접근
local fruits = {"사과", "배"}
print(fruits[3]) -- nil
올바른 방법: 항상 리스트의 크기를 확인하고 인덱스를 접근해야 합니다.
실수 2: 테이블을 잘못 초기화
local cart = {}
addToCart("티셔츠") -- cart가 nil일 경우 오류 발생
올바른 방법: 항상 테이블을 초기화한 후 사용해야 합니다.