C#에서 Queue<T>의 맨 앞에 있는 개체를 확인하려면 Peek() 메서드를 사용하면 됩니다. Peek()는 큐에서 요소를 제거하지 않은 채 선두에 있는 요소만 반환하기 때문에, 다음에 처리될 항목을 미리 살펴봐야 할 때 매우 유용합니다.
Peek() 메서드의 주요 특징
- 비파괴적 조회: 반환된 요소는 큐에서 제거되지 않고 그대로 유지됩니다.
- 선입선출(FIFO): 항상 가장 먼저 삽입된 요소를 반환합니다.
- 예외 주의: 빈 큐에서 호출하면 InvalidOperationException이 발생하므로, 호출 전 Count 속성으로 요소 존재 여부를 확인하는 것이 안전합니다.
예제 1 – 기본 사용법
A부터 G까지 일곱 개의 요소를 순서대로 삽입한 뒤, Count로 현재 요소 개수를 출력하고 Peek()로 맨 앞 요소를 확인하는 예제입니다.
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());
}
}
출력 결과
Count of elements = 7 Element at the beginning of queue = A
큐에 7개의 요소가 들어 있으며, Peek()는 가장 먼저 삽입된 A를 반환합니다.
예제 2 – 새 요소 추가 후 Peek() 재확인
이번에는 기존 큐에 H, I, J 세 개의 요소를 추가로 넣은 상태에서 Peek() 결과가 어떻게 달라지는지 살펴보겠습니다.
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.Enqueue("H");
queue.Enqueue("I");
queue.Enqueue("J");
Console.WriteLine("Count of elements = "+queue.Count);
Console.WriteLine("Element at the beginning of queue = " + queue.Peek());
}
}
출력 결과
Count of elements = 7 Element at the beginning of queue = A Count of elements = 10 Element at the beginning of queue = A
실행 결과를 보면 요소가 추가되어 Count가 7에서 10으로 늘었음에도 불구하고, Peek()가 반환하는 맨 앞 요소는 여전히 A입니다. Enqueue()는 항상 큐의 뒤쪽에 요소를 추가하기 때문에 선두에 있는 A는 변하지 않습니다. 만약 맨 앞 요소를 조회하면서 동시에 제거하고 싶다면 Peek() 대신 Dequeue()를 사용하면 됩니다.