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

큐는 아이템의 모음으로 이루어진 선형 데이터 구조입니다. Roblox에는 두 가지 유형의 큐가 있습니다: 정규 큐는 선입선출(FIFO) 원칙을 따르고, 우선순위 큐는 데이터 접근 순서를 결정하는 우선순위를 가진 큐입니다. 두 유형의 큐에 있는 아이템은 모든 Luau 데이터 유형이 될 수 있습니다.

큐는 MemoryStoreService라는 비영구 데이터 저장소 서비스의 내장 데이터 구조로, 큐를 얻고 데이터에 추가, 읽기, 또는 제거하기 위해 내장 함수를 직접 호출할 수 있습니다. 게임 내에서 작업을 예약하거나 요청을 처리하는 등의 다른 용도로는 테이블을 사용하여 직접 큐를 구현할 수 있습니다.

정규 큐

정규 큐는 FIFO 순서를 유지하며, 모든 아이템이 큐의 맨 뒤에 추가되고 추가된 순서대로 앞에서 뒤로 읽거나 제거됩니다.

정규 큐가 아이템을 추가하고 읽고 제거하는 순서

우선순위 큐

우선순위 큐는 FIFO 규칙을 따르지 않으며, 각 아이템은 읽거나 제거되는 순서를 나타내는 우선순위 번호와 함께 추가될 수 있습니다. 우선순위 큐의 맨 뒤 아이템은 기본 우선순위가 0이고, 큐의 맨 앞 아이템은 다음 예제에서 보듯이 가장 높은 설정 우선순위를 가지고 있습니다. 이 경우 우선순위는 5입니다.

아이템의 설정된 우선순위가 큐가 아이템을 읽는 순서를 변경합니다

이 예제에서, 설정된 우선순위가 3인 아이템이 큐에 추가되고 있습니다. 큐는 새 아이템을 설정된 우선순위가 3 이상인 기존 모든 아이템 뒤에 배치합니다. 큐의 맨 앞에 아이템을 배치하려면 현재 가장 높은 설정 우선순위보다 높게 설정해야 합니다. 이 예제에서는 우선순위를 6 이상으로 설정해야 합니다.

우선순위 큐는 추가된 순서가 아닌 중요도에 따라 데이터를 읽거나 접근하려는 상황에서 유용합니다. 아이템을 추가할 때 정수로 우선순위를 설정할 수 있으며, 큐는 더 높은 우선순위를 가진 아이템을 먼저 처리합니다. 예를 들어, 기다린 시간이 오래된 사용자에게 더 높은 우선순위를 부여하여 매칭을 위해 우선순위 큐를 사용할 수 있습니다.

큐 구현하기

MemoryStoreService의 내장 큐를 사용하거나 테이블을 사용하여 다른 모든 용도로 큐를 구현할 수 있습니다. 다음 코드 샘플은 정규 큐 구현을 보여줍니다. 이 구현을 게임에서 사용하려면 ModuleScript로 저장하고 ReplicatedStorage에 보관하여 큐를 클라이언트와 서버 모두에서 접근할 수 있도록 해야 합니다.

테이블을 사용한 정규 큐 구현

--!strict
local Queue = {}
Queue.__index = Queue
export type Queue<T> = typeof(setmetatable(
{} :: {
_first: number,
_last: number,
_queue: { T },
},
Queue
))
function Queue.new<T>(): Queue<T>
local self = setmetatable({
_first = 0,
_last = -1,
_queue = {},
}, Queue)
return self
end
-- 큐가 비어 있는지 확인
function Queue.isEmpty<T>(self: Queue<T>)
return self._first > self._last
end
-- 큐에 값을 추가
function Queue.enqueue<T>(self: Queue<T>, value: T)
local last = self._last + 1
self._last = last
self._queue[last] = value
end
-- 큐에서 값을 제거
function Queue.dequeue<T>(self: Queue<T>): T
if self:isEmpty() then
error("비어 있는 큐에서 제거할 수 없습니다")
end
local first = self._first
local value = self._queue[first]
self._queue[first] = nil
self._first = first + 1
return value
end
return Queue

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

정규 큐 사용 예

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Queue = require(ReplicatedStorage:WaitForChild("Queue"))
local myQueue = Queue.new()
-- 큐에 몇 가지 값 추가
myQueue:enqueue(5)
myQueue:enqueue(10)
myQueue:enqueue(15)
-- myQueue = { 5, 10, 15 }
-- 큐에서 하나의 값 제거
local first = myQueue:dequeue()
print("큐에 추가된 첫 번째 값은", first)
-- myQueue = { 10, 15 }
-- 큐에 더 많은 값 추가
myQueue:enqueue(20)
myQueue:enqueue(25)
myQueue:enqueue(30)
-- myQueue = { 10, 15, 20, 25, 30 }
-- 큐에서 또 하나의 값 제거
local second = myQueue:dequeue()
print("큐에 추가된 두 번째 값은", second)
-- myQueue = { 15, 20, 25, 30 }
©2026 Roblox Corporation. Roblox 및 Roblox 로고, 'Powering Imagination'은 미국 및 기타 국가 내 당사의 등록 및 미등록 상표입니다.