I'm FanJae.

[20260514] C# ( Stack<T> ) 본문

Unity/Unity 초격차캠프

[20260514] C# ( Stack<T> )

FanJae 2026. 5. 14. 17:01

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()를 사용하는 것이 좋다.


 

Comments