IMCAT.DEV
로그인 가입
Lua 중급 자료구조

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   바나나

코드 한 줄씩 동작 설명

  1. local fruits = {"사과", "배", "포도"}: 과일 이름으로 이루어진 리스트를 생성합니다.
  2. table.insert(fruits, "바나나"): 리스트의 끝에 "바나나"를 추가합니다.
  3. for i, fruit in ipairs(fruits) do: 리스트의 각 요소를 반복하여 출력하기 위해 루프를 시작합니다.
  4. print(i, fruit): 현재 인덱스와 과일 이름을 출력합니다.
  5. 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일 경우 오류 발생

    올바른 방법: 항상 테이블을 초기화한 후 사용해야 합니다.

    6. 정리

    • Lua의 컬렉션 라이브러리는 데이터 구조를 효율적으로 관리하는 중요한 도구입니다.
    • 리스트, 스택, 큐, 맵의 개념을 이해하고 활용할 수 있어야 합니다.
    • 실무에서 자주 사용하는 패턴 (장바구니, 대기열 관리 등)을 익혀야 합니다.
    • 다음에는 Lua에서 고급 테이블 사용법이나 메타테이블을 학습하는 것도 좋습니다.