Stack<T>

황현중·2025년 11월 25일

C#

목록 보기
9/24
C# Stack<T> 개념 쉽게 이해하기

1. 스택 요약

  • Stack은 LIFO 구조이다 (Last-In, First-Out)
  • Push: 위로 쌓기
  • Pop: 위에서 꺼내기
  • Peek: 위에서 보기 (제거 안 함)
  • Undo

2. 스택(Stack)이란?

스택은 말 그대로 “위로 쌓는 구조”입니다.
접시를 한 장씩 위로 쌓는 것처럼, 나중에 올라간 것이 먼저 나옵니다.

Push(10)
┌─────────┐
│ 10 │ ← Top
└─────────┘

Push(20)
┌─────────┐
│ 20 │ ← Top
├─────────┤
│ 10 │
└─────────┘

Push(30)
┌─────────┐
│ 30 │ ← Top
├─────────┤
│ 20 │
├─────────┤
│ 10 │
└─────────┘

Pop() → 30 제거

✔ Push = 스택의 맨 위에 올리기
✔ Pop = 스택의 맨 위에서 꺼내기
✔ Peek = 꺼내지 않고 맨 위 보기


3. 가장 간단한 Stack 코드 예제

아래 예제는 스택의 기본 동작인 Push / Pop / Peek을 순서대로 보여줍니다.


using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Stack stack = new Stack();

        stack.Push(10);
        stack.Push(20);
        stack.Push(30);

        Console.WriteLine("Peek: " + stack.Peek()); // 30
        Console.WriteLine("Pop: " + stack.Pop());   // 30
        Console.WriteLine("Peek: " + stack.Peek()); // 20     
        Console.WriteLine("Pop: " + stack.Pop());   // 20
        Console.WriteLine("Count: " + stack.Count); // 1
    }
}

출력 흐름:


Peek: 30
Pop: 30
Peek: 20
Pop: 20
Count: 1

4. 스택의 작동 원리를 이해하는 ASCII 그림

아래는 위 코드가 실행될 때의 스택 변화 상황을 그림으로 표현한 것입니다.

초기 상태: (Empty)

Push(10)
┌─────────┐
│ 10 │
└─────────┘

Push(20)
┌─────────┐
│ 20 │ ← Top
├─────────┤
│ 10 │
└─────────┘

Push(30)
┌─────────┐
│ 30 │ ← Top
├─────────┤
│ 20 │
├─────────┤
│ 10 │
└─────────┘

Peek() → 30 (제거 안 함)

Pop() → 30 제거 후
┌─────────┐
│ 20 │ ← Top
├─────────┤
│ 10 │
└─────────┘


5. 스택을 활용한 Undo 기능 예제

스택은 Undo 기능을 구현할 때 매우 유용합니다.


class Editor
{
    private Stack<string> undoStack = new Stack<string>();

    public void Type(string text)
    {
        undoStack.Push(text);
        Console.WriteLine("입력: " + text);
    }

    public void Undo()
    {
        if (undoStack.Count == 0)
        {
            Console.WriteLine("Undo할 내용 없음");
            return;
        }

        string removed = undoStack.Pop();
        Console.WriteLine("Undo: " + removed);
    }
}

0개의 댓글