I'm FanJae.

[20260514] C# ( Queue<T> ) 본문

Unity/Unity 초격차캠프

[20260514] C# ( Queue<T> )

FanJae 2026. 5. 14. 17:18

1) 정의

- Queue는 FIFO(First in First Out) 구조를 사용하는 자료구조이다.

- 즉, 먼저 들어온 데이터가 먼저 나온다.

- 이런 구조로 되어 있어서 하나 씩 쌓여 있다고 생각하면 된다.

 

 


2) 필요한 이유

- Queue는 먼저 들어온 작업부터 처리해야 하는 상황에서 자주 사용된다.

2-1) 예시

- 이벤트의 처리

- 서버 요청 처리

- 턴 순서 처리

- 작업 대기열

 

※ 즉, 순서 보장이 중요한 상황에서 주로 사용된다.


3) 주요 동작

※ 사진에서는 편하게 들기 위해(그리기가 편리하여) 일반적인 형태의 Queue를 사용하였다. 하지만 C#의 Queue<T>는 단방향 형태의 Queue가 아닌 원형 큐(Circular Queue) 형태로 구현되어 있다.

3-1) Enqueue()

- Queue의 뒤쪽, 즉 rear 또는 back 위치에 데이터를 추가한다.

Queue<int> queue = new Queue<int>();

queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);


3-2) Dequeue()

Queue의 앞쪽, 즉 front 위치에 있는 데이터를 제거하고 반환한다.

int value = queue.Dequeue();

Console.WriteLine(value);


3-3) Peek()

- Queue의 front 위치에 있는 데이터를 제거하지 않고 확인만 한다.

int value = queue.Peek();

Console.WriteLine(value); // 출력 : 2


3-4) Contains()

- Queue 안에 특정 데이터가 존재하는지 확인한다.

bool result = queue.Contains(3);

Console.WriteLine(result); // 출력 : True

3-5) Count

- 현재 Queue에 들어 있는 데이터 개수를 반환한다. (Property)

Console.WriteLine(queue.Count); // 출력 : 2

3-6) Clear()

- Queue에 들어 있는 모든 데이터를 제거한다.

queue.Clear();

Console.WriteLine(queue.Count); // 출력 : 0

 


4) Queue 사용 시 주의점

4-1) Dequeue(), Peek() 주의점

- Queue가 비어 있을 때 호출하면 InvalidOperationException이 발생한다.

Queue<int> queue = new Queue<int>();

queue.Dequeue(); // InvalidOperationException 발생

- 그래서 안전하게 처리하려면 Count를 확인하거나 TryDequeue(), TryPeek()를 사용할 수 있다.

if (queue.Count > 0) int value = queue.Dequeue();

4-2) TryDequeue(), TryPeek()

- C#에서는 이러한 예외를 피하기 위해서 TryDequeue()나 TryPeek()를 사용하기도 한다.

Queue<int> queue = new Queue<int>();

if (queue.TryPop(out int value))
{
    Console.WriteLine(value);
}
else
{
    Console.WriteLine("Queue가 비어 있습니다.");
}
if (queue.TryPeek(out int front))
{
	Console.WriteLine(front);
}

- 이전에도 다뤘던 Try 문구가 들어간 애들이 대부분 그렇듯 실패하면 예외가 아닌 False를 반환한다.


5) 정리

- Queue는 FIFO(First in First Out) 구조를 따르는 자료구조이다.
- 즉, 먼저 들어온 데이터가 먼저 나간다.
- C#에서는 Stack<T>를 사용해 Queue 자료구조를 쉽게 다룰 수 있다.
- 다만, Dequeue()과 Peek()는 Queue가 비어 있을 때 호출 하면 예외가 발생한다. 사용 전에 Count를 확인하거나, TryDequeue(), TryPeek()를 사용하는 것이 좋다.

Comments