Queue<T>

황현중·2025년 11월 25일

C#

목록 보기
10/24

1. 큐 요약

  • Queue는 FIFO 구조이다 (First-In, First-Out)
  • Enqueue: 뒤에서 추가
  • Dequeue: 앞에서 꺼내기
  • Peek: 맨 앞 확인 (제거 안 함)
  • 프린터 대기열, 네트워크 패킷 처리, 줄 서기 등

2. 큐(Queue)란?

Queue는 실제 생활에서의 줄서기와 완전히 동일한 구조이다.
가장 먼저 도착한 사람이 가장 먼저 처리된다.
그래서 Queue는 FIFO(First-In, First-Out) 구조라고 한다.

사람이 줄을 서는 모습:

[Front] 사람1 사람2 사람3 [Rear]

Dequeue() → 사람1 나감

[Front] 사람2 사람3 [Rear]

Enqueue(사람4)

[Front] 사람2 사람3 사람4 [Rear]

✔ Enqueue = 맨 뒤(Rearmost)에 줄 추가
✔ Dequeue = 맨 앞(Front)에서 꺼내기
✔ FIFO = 먼저 들어온 것이 먼저 나간다


3. 가장 간단한 Queue 코드 예제


using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Queue queue = new Queue();

        queue.Enqueue(10);
        queue.Enqueue(20);
        queue.Enqueue(30);

        Console.WriteLine("Peek: " + queue.Peek()); // 10
        Console.WriteLine("Dequeue: " + queue.Dequeue()); // 10
        Console.WriteLine("Peek: " + queue.Peek()); // 20
        Console.WriteLine("Dequeue: " + queue.Dequeue()); // 20

        Console.WriteLine("Count: " + queue.Count); // 1
    }
}

출력:


Peek: 10
Dequeue: 10
Peek: 20
Dequeue: 20
Count: 1

4. 큐의 작동 원리를 이해하는 ASCII 그림

아래는 위 코드가 실행될 때 Queue 내부 상태가 어떻게 변하는지 그림으로 표현한 것이다.

초기 상태: (Empty)

Enqueue(10)
Front → [10] ← Rear

Enqueue(20)
Front → [10][20] ← Rear

Enqueue(30)
Front → [10][20][30] ← Rear

Peek()
Front 값 = 10 (제거 X)

Dequeue() → 10 제거 후
Front → [20][30] ← Rear

Dequeue() → 20 제거 후
Front → [30] ← Rear

Count = 1


5. Queue를 활용한 프린터 대기열 예제

Queue는 “먼저 요청된 작업을 먼저 처리해야 하는 상황”에서 가장 많이 사용된다.


using System;
using System.Collections.Generic;

class PrintJob
{
    public string Title { get; set; }
    public PrintJob(string title) => Title = title;
}

class Program
{
    static void Main()
    {
        Queue printQueue = new Queue();

        printQueue.Enqueue(new PrintJob("A문서"));
        printQueue.Enqueue(new PrintJob("B문서"));
        printQueue.Enqueue(new PrintJob("C문서"));

        while (printQueue.Count > 0)
        {
            var job = printQueue.Dequeue();
            Console.WriteLine("인쇄 중: " + job.Title);
        }
    }
}

출력:


인쇄 중: A문서
인쇄 중: B문서
인쇄 중: C문서

→ Queue는 프린터처럼 “먼저 요청된 작업을 먼저 처리하는 구조”와 완벽하게 일치한다.

0개의 댓글