스택(Stack)이란?
C#에서 스택(Stack)은 Push(삽입)와 Pop(삭제) 연산을 통해 구현되는 대표적인 자료구조입니다. 스택은 객체를 LIFO(Last-In, First-Out, 후입선출) 방식으로 관리하는 컬렉션으로, 가장 마지막에 추가된 요소가 가장 먼저 제거됩니다.
C#에서 스택을 사용하려면 System.Collections 네임스페이스에 포함된 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(); 스택의 내용을 새 배열로 복사합니다. |
Push 연산 – 요소 추가하기
Push 연산은 스택의 맨 위에 새로운 요소를 추가합니다.
Stack st = new Stack();
st.Push('A');
st.Push('B');
st.Push('C');
st.Push('D');
Pop 연산 – 요소 제거하기
Pop 연산은 스택의 맨 위에 있는 요소를 제거하면서 반환합니다. 반면 Peek()은 요소를 제거하지 않고 맨 위의 값만 확인하고 싶을 때 사용합니다.
예제: Stack 클래스 활용하기
다음 예제는 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("현재 스택: ");
foreach (char c in st) {
Console.Write(c + " ");
}
Console.WriteLine();
st.Push('P');
st.Push('Q');
Console.WriteLine("스택에서 다음으로 꺼낼 값: {0}", st.Peek());
Console.WriteLine("현재 스택: ");
foreach (char c in st) {
Console.Write(c + " ");
}
Console.WriteLine();
Console.WriteLine("값 제거 중....");
st.Pop();
st.Pop();
st.Pop();
Console.WriteLine("현재 스택: ");
foreach (char c in st) {
Console.Write(c + " ");
}
}
}
}
실행 결과
현재 스택: D C B A 스택에서 다음으로 꺼낼 값: Q 현재 스택: Q P D C B A 값 제거 중.... 현재 스택: C B A
마무리
스택은 실행 취소(Undo) 기능, 재귀 호출 관리, 괄호 짝 검사 등 다양한 분야에서 활용되는 기본적인 자료구조입니다. 참고로 C#에서는 System.Collections.Generic 네임스페이스의 Stack<T> 제네릭 버전도 제공되므로, 타입 안전성과 성능이 중요한 환경이라면 제네릭 스택을 사용하는 것이 좋습니다.