C#에서 객체를 선입선출(FIFO, First-In First-Out) 방식으로 관리하려면 Queue 클래스를 사용합니다. 큐에 항목을 추가하는 작업을 인큐(Enqueue), 큐에서 항목을 제거하는 작업을 디큐(Dequeue)라고 부릅니다.
이름 그대로 먼저 들어온 데이터가 먼저 나가는 구조이기 때문에, 작업 대기열 처리나 순차적인 데이터 처리에 유용하게 활용됩니다.
Queue 클래스의 주요 메서드
Queue 클래스에서 자주 사용되는 메서드는 다음과 같습니다.
| 번호 | 메서드 및 설명 |
|---|---|
| 1 | public virtual void Clear(); Queue의 모든 요소를 제거합니다. |
| 2 | public virtual bool Contains(object obj); 특정 요소가 Queue에 포함되어 있는지 여부를 확인합니다. |
| 3 | public virtual object Dequeue(); Queue 맨 앞에 있는 객체를 제거하고 반환합니다. |
| 4 | public virtual void Enqueue(object obj); Queue의 맨 뒤에 객체를 추가합니다. |
| 5 | public virtual object[] ToArray(); Queue의 내용을 새로운 배열로 복사합니다. |
인큐와 디큐 사용 예제
아래 예제를 통해 Queue 클래스에서 인큐와 디큐가 어떻게 동작하는지 살펴보겠습니다.
코드
using System;
using System.Collections;
namespace Demo {
class Program {
static void Main(string[] args) {
Queue q = new Queue();
q.Enqueue('A');
q.Enqueue('B');
q.Enqueue('C');
q.Enqueue('D');
Console.WriteLine("Current queue: ");
foreach (char c in q) Console.Write(c + " ");
Console.WriteLine();
q.Enqueue('E');
q.Enqueue('F');
q.Enqueue('G');
q.Enqueue('H');
Console.WriteLine("Current queue: ");
foreach (char c in q) Console.Write(c + " ");
Console.WriteLine();
Console.WriteLine("Removing some values ");
char ch = (char)q.Dequeue();
Console.WriteLine("Value removed: {0}", ch);
ch = (char)q.Dequeue();
Console.WriteLine("Value removed: {0}", ch);
Console.ReadKey();
}
}
}실행 결과
Current queue: A B C D Current queue: A B C D E F G H Removing some values Value removed: A Value removed: B
예제 코드 분석
위 예제에서 Enqueue() 메서드를 사용해 요소를 큐에 추가했습니다.
Queue q = new Queue();
q.Enqueue('A');
q.Enqueue('B');
q.Enqueue('C');
q.Enqueue('D');그리고 Dequeue() 메서드를 사용해 큐에서 요소를 제거했습니다. 실행 결과를 보면 가장 먼저 추가한 'A'가 가장 먼저 제거되는 것을 확인할 수 있으며, 이것이 바로 선입선출(FIFO) 구조의 핵심입니다.
char ch = (char)q.Dequeue();
Console.WriteLine("Value removed: {0}", ch);