C#에서 스택(Stack)의 맨 위에 있는 개체를 확인하려면 Peek() 메서드를 사용합니다. 이 메서드는 스택에서 요소를 제거하지 않고 가장 위에 있는 항목만 반환하기 때문에, 스택의 상태를 유지한 채 최상위 값을 조회할 때 매우 유용합니다.
Peek() 메서드란?
Stack<T> 클래스의 Peek() 메서드는 스택의 맨 위(가장 마지막에 Push된) 요소를 반환합니다. 중요한 특징은 다음과 같습니다.
- 요소를 반환만 하며 스택에서 제거하지 않습니다.
- 스택이 비어 있을 경우 InvalidOperationException 예외가 발생합니다.
예제 1: 문자열 스택에서 최상위 요소 가져오기
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
Stack<string> stack = new Stack<string>();
stack.Push("A");
stack.Push("B");
stack.Push("C");
stack.Push("D");
stack.Push("E");
stack.Push("F");
stack.Push("G");
stack.Push("H");
stack.Push("I");
stack.Push("J");
Console.WriteLine("Count of elements = " + stack.Count);
Console.WriteLine("Element at the top of stack = " + stack.Peek());
}
}실행 결과
Count of elements = 10 Element at the top of stack = J
위 예제에서는 A부터 J까지 10개의 문자열을 순서대로 Push했습니다. 스택은 LIFO(Last In, First Out, 후입선출) 구조이므로 마지막에 추가된 "J"가 맨 위에 위치하게 되며, Peek() 호출 시 "J"가 반환됩니다.
예제 2: 정수 스택에서 Peek() 여러 번 호출하기
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
Stack<int> stack = new Stack<int>();
stack.Push(10);
stack.Push(20);
stack.Push(30);
stack.Push(40);
stack.Push(50);
stack.Push(60);
stack.Push(70);
stack.Push(80);
stack.Push(90);
stack.Push(100);
Console.WriteLine("Count of elements = " + stack.Count);
Console.WriteLine("Element at the top of stack = " + stack.Peek());
Console.WriteLine("Element at the top of stack = " + stack.Peek());
}
}실행 결과
Count of elements = 10 Element at the top of stack = 100 Element at the top of stack = 100
두 번째 예제에서는 Peek()를 두 번 연속 호출했지만, 결과는 모두 100으로 동일합니다. 이는 Peek()가 요소를 제거하지 않기 때문입니다. 만약 Pop()을 사용했다면 첫 번째 호출 후 스택에서 100이 제거되어 두 번째 호출 결과가 90으로 달라졌을 것입니다.
Peek()와 Pop()의 차이점
두 메서드 모두 스택의 최상위 요소를 반환하지만, 결정적인 차이가 있습니다.
- Peek(): 최상위 요소를 반환만 하며, 스택은 변경되지 않습니다.
- Pop(): 최상위 요소를 반환하고 해당 요소를 스택에서 제거합니다.
따라서 스택의 내용을 그대로 유지하면서 최상위 값만 확인하고 싶다면 Peek()를 사용하는 것이 올바른 선택입니다.