C#의 Stack 클래스는 LIFO(Last-In, First-Out, 후입선출) 방식으로 객체를 저장하는 컬렉션입니다. 즉, 가장 나중에 추가된 요소가 가장 먼저 제거되는 구조로, 데이터를 역순으로 처리해야 하는 상황에서 유용하게 사용됩니다.
Stack 클래스에서 자주 사용하는 대표적인 속성은 다음과 같습니다.
- Count – 스택에 현재 포함된 요소의 개수를 반환합니다.
Push 연산이란?
Push는 스택의 맨 위(top)에 새로운 요소를 추가하는 연산입니다. Push() 메서드를 사용하면 다음과 같이 요소를 순서대로 쌓을 수 있습니다.
Stack st = new Stack();
st.Push('A');
st.Push('B');
st.Push('C');
st.Push('D');위 코드가 실행되면 'A'부터 'D'까지 차례대로 스택에 쌓이며, 이때 스택의 최상위 요소는 마지막에 추가된 'D'가 됩니다.
Pop 연산이란?
Pop은 스택의 맨 위에 있는 요소를 제거하면서 반환하는 연산입니다. 후입선출 구조 특성상 가장 최근에 Push된 요소부터 제거됩니다.
또한, 요소를 제거하지 않고 맨 위의 값만 확인하고 싶다면 Peek() 메서드를 활용할 수 있습니다.
Push와 Pop 실전 예제
아래 예제는 Stack 클래스의 Push(), Pop(), Peek() 메서드를 함께 사용하여 스택의 동작 원리를 보여줍니다.
using System;
using System.Collections;
namespace CollectionsApplication {
class Program {
static void Main(string[] args) {
Stack st = new Stack();
st.Push('A');
st.Push('B');
st.Push('C');
st.Push('D');
Console.WriteLine("Current stack: ");
foreach (char c in st) {
Console.Write(c + " ");
}
Console.WriteLine();
st.Push('P');
st.Push('Q');
Console.WriteLine("The next poppable value in stack: {0}", st.Peek());
Console.WriteLine("Current stack: ");
foreach (char c in st) {
Console.Write(c + " ");
}
Console.WriteLine();
Console.WriteLine("Removing values....");
st.Pop();
st.Pop();
st.Pop();
Console.WriteLine("Current stack: ");
foreach (char c in st) {
Console.Write(c + " ");
}
}
}
}실행 결과 분석
1. 처음에 'A', 'B', 'C', 'D'를 Push하면 출력 결과는 D C B A 순서로 표시됩니다. 스택은 후입선출 구조이므로 열거 시에도 맨 위 요소부터 반환됩니다.
2. 이후 'P'와 'Q'를 추가로 Push한 뒤 Peek()를 호출하면, 다음에 Pop될 값인 Q가 출력됩니다.
3. Pop()을 세 번 호출하면 'Q', 'P', 'D'가 차례대로 제거되고, 남은 스택은 C B A가 됩니다.
정리
Stack 클래스는 Push로 데이터를 쌓고, Pop으로 꺼내는 단순하지만 강력한 LIFO 컬렉션입니다. 실행 취소(Undo) 기능, 재귀 호출 관리, 괄호 검사 등 다양한 알고리즘 문제 해결에 널리 활용되므로, Push와 Pop의 동작 원리를 정확히 이해해 두는 것이 좋습니다.