C#의 Stack(스택) 클래스는 객체를 후입선출(LIFO, Last-In First-Out) 방식으로 저장하는 컬렉션입니다. 즉, 가장 나중에 추가된 요소가 가장 먼저 제거되는 구조로, 책을 쌓아 올린 더미처럼 맨 위에 있는 항목부터 꺼내야 하는 상황에 적합합니다.
Stack 클래스의 주요 메서드
Stack 클래스에서 자주 사용되는 메서드는 다음과 같습니다.
| 번호 | 메서드 및 설명 |
|---|---|
| 1 | public virtual void Clear(); 스택에 있는 모든 요소를 제거합니다. |
| 2 | public virtual bool Contains(object obj); 특정 요소가 스택에 포함되어 있는지 여부를 확인합니다. |
| 3 | public virtual object Peek(); 요소를 제거하지 않고 스택 맨 위에 있는 객체를 반환합니다. |
| 4 | public virtual object Pop(); 스택 맨 위에 있는 객체를 제거하고 그 객체를 반환합니다. |
| 5 | public virtual void Push(object obj); 스택 맨 위에 새로운 객체를 삽입합니다. |
| 6 | public virtual object[] ToArray(); 스택의 내용을 새로운 배열로 복사합니다. |
Stack 클래스의 속성
Stack 클래스에는 Count라는 속성이 있으며, 현재 스택에 저장된 요소의 개수를 반환합니다.
Push()와 Pop() 활용 예제
다음 예제는 Stack 클래스를 생성하고 Push() 메서드로 요소를 추가한 뒤, Pop() 메서드로 요소를 제거하는 과정을 보여줍니다.
예제 코드
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 + " ");
}
}
}
}실행 결과
Current stack: D C B A The next poppable value in stack: Q Current stack: Q P D C B A Removing values.... Current stack: C B A
실행 결과를 보면, 문자 A, B, C, D 순서로 Push()했지만 출력 시에는 역순인 D, C, B, A로 표시됩니다. 이것이 바로 스택의 후입선출(LIFO) 특성입니다. 또한 Peek()는 요소를 제거하지 않고 다음에 꺼낼 값을 미리 확인할 수 있으며, Pop()을 세 번 호출하면 Q, P, D가 차례대로 제거되어 C, B, A만 남게 됩니다.