Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# Queue.Dequeue() 메서드 사용법과 예제 총정리


C#의 Queue.Dequeue() 메서드는 큐(Queue)의 맨 앞에 위치한 요소를 제거하고 그 요소를 반환하는 역할을 합니다. FIFO(First-In, First-Out, 선입선출) 구조로 동작하는 큐에서 데이터를 저장된 순서대로 하나씩 꺼낼 때 반드시 사용되는 핵심 메서드입니다.

구문

Queue.Dequeue() 메서드의 기본 구문은 다음과 같습니다.

public virtual object Dequeue ();

매개변수는 받지 않으며, 호출 즉시 큐의 첫 번째 요소가 삭제된 후 해당 요소가 반환됩니다.

예제 1

먼저 간단한 예제를 통해 Dequeue 메서드가 어떻게 동작하는지 살펴보겠습니다.

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      Queue<string> queue = new Queue<string>();
      queue.Enqueue("A");
      queue.Enqueue("B");
      queue.Enqueue("C");
      queue.Enqueue("D");
      queue.Enqueue("E");
      queue.Enqueue("F");
      queue.Enqueue("G");
      Console.WriteLine("Count of elements = "+queue.Count);
      Console.WriteLine("Element at the beginning of queue = " + queue.Peek());
      queue.Dequeue();
      queue.Dequeue();
      queue.Dequeue();
      Console.WriteLine("Count of elements = "+queue.Count);
   }
}

위 코드에서는 A부터 G까지 총 7개의 문자열을 Enqueue로 큐에 추가한 후, Dequeue를 세 번 호출하여 맨 앞의 세 요소(A, B, C)를 차례대로 제거했습니다. 그 결과 요소 개수가 7개에서 4개로 줄어든 것을 확인할 수 있습니다.

실행 결과

Count of elements = 7
Element at the beginning of queue = A
Count of elements = 4

예제 2

이번에는 Dequeue 호출 전후로 큐의 내부 상태를 직접 출력하여 변화를 확인할 수 있는 예제를 살펴보겠습니다.

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      Queue<string> queue = new Queue<string>();
      queue.Enqueue("Gary");
      queue.Enqueue("Jack");
      queue.Enqueue("Ryan");
      queue.Enqueue("Kevin");
      queue.Enqueue("Mark");
      queue.Enqueue("Jack");
      queue.Enqueue("Ryan");
      queue.Enqueue("Kevin");
      Console.Write("Count of elements = ");
      Console.WriteLine(queue.Count);
      Console.WriteLine("Queue...");
      foreach(string i in queue) {
         Console.WriteLine(i);
      }
      queue.Dequeue();
      queue.Dequeue();
      Console.WriteLine("Queue...UPDATED");
      foreach(string i in queue) {
         Console.WriteLine(i);
      }
      Console.Write("Count of elements (updated) = "+queue.Count);
      queue.Clear();
      Console.Write("\nCount of elements (updated AGAIN) = ");
      Console.WriteLine(queue.Count);
   }
}

이 예제에서는 8개의 이름을 큐에 담은 뒤 Dequeue를 두 번 실행해 맨 앞의 Gary와 Jack을 제거합니다. 이후 Clear() 메서드를 호출하여 큐의 모든 요소를 한꺼번에 비우는 과정까지 보여줍니다.

실행 결과

Count of elements = 8
Queue...
Gary
Jack
Ryan
Kevin
Mark
Jack
Ryan
Kevin
Queue...UPDATED
Ryan
Kevin
Mark
Jack
Ryan
Kevin
Count of elements (updated) = 6
Count of elements (updated AGAIN) = 0

Dequeue 사용 시 주의 사항

  • 빈 큐 예외: 큐가 비어 있는 상태에서 Dequeue를 호출하면 InvalidOperationException이 발생합니다. 따라서 호출 전에 Count 속성으로 요소 개수를 확인하는 것이 안전합니다.
  • Peek과의 차이: Peek()는 맨 앞 요소를 단순히 조회만 하는 반면, Dequeue()는 해당 요소를 실제로 큐에서 삭제하고 반환한다는 점이 다릅니다.
  • 뛰어난 성능: Dequeue는 O(1)의 시간 복잡도로 동작하기 때문에 대용량 데이터를 순차적으로 처리할 때도 효율적입니다.
  • 반환 타입: 제네릭 Queue<T>에서는 T 타입의 요소가 그대로 반환되지만, 비제네릭 Queue에서는 object 타입으로 반환되므로 필요에 따라 명시적 형 변환(casting)이 필요할 수 있습니다.