스택

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

스택은 마지막에 들어온 것이 가장 먼저 나가는(LIFO) 원칙을 따르는 항목 모음으로 구성된 선형 데이터 구조입니다. 스택의 맨 위는 스택에 가장 최근에 추가된 항목이며, 스택의 맨 아래는 가장 덜 최근에 추가된 항목입니다.

스택 데이터 구조는 저녁 접시 더미처럼 생각할 수 있습니다: 한 개로 시작해서 그 위에 또 하나를 놓습니다. 스택에서 접시를 꺼낼 때, 스택에서 가장 먼저 제거하는 것은 가장 최근에 맨 위에 올려 놓은 것입니다.

스택에는 두 가지 주요 작업이 있습니다: push는 스택의 맨 위에 요소를 추가하는 것이고, pop은 스택의 맨 위에서 요소를 제거하는 것입니다. 스택은 고정 크기를 가지거나 동적으로 크기를 변경할 수 있습니다. 스택은 백트래킹 알고리즘과 같은 설계에 유용합니다.

스택 구현하기

루아우는 스택을 내장 데이터 구조로 지원하지 않지만, 테이블을 사용하여 스택을 구현할 수 있습니다. 다음 코드 샘플은 스택을 생성하고, 객체를 스택에 push하며, 스택에서 객체를 pop하는 방법을 보여줍니다. 게임에서 이 구현을 사용하려면 ModuleScript로 저장하고 ReplicatedStorage에 저장하여 클라이언트와 서버 모두에서 스택에 접근할 수 있도록 해야 합니다.


local Stack = {}
Stack.__index = Stack
function Stack.new()
local self = setmetatable({}, Stack)
self._stack = {}
return self
end
-- 스택이 비어 있는지 확인하기
function Stack:isEmpty()
return #self._stack == 0
end
-- 스택에 새 값을 추가하기
function Stack:push(value)
table.insert(self._stack, value)
end
-- 스택에서 값을 꺼내기
function Stack:pop()
if self:isEmpty() then
return nil
end
return table.remove(self._stack, #self._stack)
end
return Stack

다음 코드 샘플은 Workspace 아래의 Script로서의 사용 예입니다. 이전 구현 코드 샘플이 적절히 저장되어 있는 한, 코드를 수정하고, 유형 및 저장 위치를 자신의 용도에 맞게 변경할 수 있습니다.

스택 사용 예

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Stack = require(ReplicatedStorage:WaitForChild("Stack"))
local s = Stack.new()
-- 스택 변경 결과 스택 출력
s:push(1) -- {1}
s:push(5) -- {1, 5}
s:push(10) -- {1, 5, 10}
print(s:pop()) -- {1, 5} 10
print(s:pop()) -- {1} 5
s:push(20) -- {1, 20}
print(s:pop()) -- {1} 20
print(s:pop()) -- {} 1

이전 코드 샘플을 아무 것도 변경하지 않고 실행하면 예상 출력은 다음과 같습니다:

예상 출력

10
5
20
1
©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.