| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- C++
- 독서
- git
- Data Structure
- c#
- Toy Project
- Online Judge
- BOJ
- System Programming
- PS
- Unity
- Network Programming
- multi-thread
- Today
- Total
I'm FanJae.
[20260514] C# ( Stack<T> ) 본문
1) 정의
- Stack은 LIFO(Last In First Out) 구조를 사용하는 자료구조다.
- 즉, 마지막에 들어간 데이터가 가장 먼저 나온다.

- 이런 구조로 되어 있어서 하나 씩 쌓여 있다고 생각하면 된다.
2) 필요한 이유
- Stack은 가장 최근 작업을 우선적으로 처리해야 하는 상황에서 매우 효율적이다.
2-1) 예시
- 방금 실행한 작업에 대한 취소(Undo 기능 구현)
- 가장 최근 방문한 페이지로 돌아가기
- 현재 작업을 잠시 저장하고 복구하기
- 함수 호출 스택(Call Stack)
3) 주요 동작
3-1) Push()
- Stack의 가장 위쪽, 즉 top 위치에 데이터를 추가한다.
Stack<int> stack = new Stack<int>();
stack.Push(1);
stack.Push(2);
stack.Push(3);

3-2) Pop()
- Stack의 top 위치에 있는 데이터를 제거하고 반환한다.
int value = stack.Pop();
Console.WriteLine(value);


3-3) Peek()
- Stack의 top 위치에 있는 데이터를 제거하지 않고 확인만 한다.
int value = stack.Peek();
Console.WriteLine(value);

3-4) Contains()
- Stack 안에 특정 데이터가 존재하는지 확인한다.
bool result = stack.Contains(1);
Console.WriteLine(result); // 출력 : True
3-5) Count()
- 현재 Stack에 들어 있는 데이터 개수를 반환한다.
Console.WriteLine(stack.Count); // 출력 : 2
3-6) Clear()
- Stack에 들어 있는 모든 데이터를 제거한다.
stack.Clear();
Console.WriteLine(stack.Count);
4) Stack 사용 시 주의점
4-1) Pop(), Peek() 주의점
- Stack이 비어 있을 때 Pop()이나 Peek()를 호출 하면 예외가 발생한다.
Stack<int> stack = new Stack<int>();
stack.Pop(); // InvalidOperationException 발생
- 그래서 보통 Count로 확인 후 사용한다.
if (stack.Count > 0) int value = stack.Pop();
4-2) TryPop(), TryPeek()
- C#에서는 이러한 예외를 피하기 위해 TryPop(), TryPeek()도 사용한다.
Stack<int> stack = new Stack<int>();
if (stack.TryPop(out int value))
{
Console.WriteLine(value);
}
else
{
Console.WriteLine("Stack이 비어 있습니다.");
}
if (stack.TryPeek(out int top))
{
Console.WriteLine(top);
}
- 이전에도 다뤘던 Try 문구가 들어간 애들이 대부분 그렇듯 실패하면 예외가 아닌 False를 반환한다.
5) 정리
- Stack은 LIFO 구조를 따르는 자료구조이다.
- 즉, 마지막에 들어온 데이터가 가장 먼저 나가는 형태로 이뤄져 있다.
- C#에서는 Stack<T>를 사용해 Stack 자료구조를 쉽게 다룰 수 있다.
- 다만, Pop()과 Peek()는 Stack이 비어 있을 때 호출 하면 예외가 발생한다. 따라서, 사용 전에 Count를 확인하거나 TryPop(), TryPeek()를 사용하는 것이 좋다.
'Unity > Unity 초격차캠프' 카테고리의 다른 글
| [20260514] C# ( HashSet<T> ) (0) | 2026.05.14 |
|---|---|
| [20260514] C# ( Queue<T> ) (0) | 2026.05.14 |
| [20260513] C# ( Hash 기반 자료구조의 주의점과 이를 해결하는 기법) (0) | 2026.05.13 |
| [20260513] C# ( HashTable 와 Dictionary의 공통점, 차이점 ) (0) | 2026.05.13 |
| [20260513] C# ( 제네릭 제약 ) (0) | 2026.05.13 |