프로그래밍에서는 데이터를 묶어서 값을 꺼내거나, 값을 넣는 일이 종종 발생합니다. 이 때 Stack과 Queue 등 데이터를 저장할 수 있는 자료구조들을 자주 쓰게 되는데, 이번 포스트에서는 Stack과 Queue에 대해 알아보고, 두 자료구조의 차이점에 대해 작성해 보도록 하겠습니다.
스택은 데이터를 쌓듯이 넣고 꺼내는 구조입니다. 기본적으로 젤 최근에 들어간 친구가 먼저 나오는 후입선출(LIFO;Last In First Out) 구조를 띄고 있습니다.

1이 첫번째, 2가 두번째, 3이 세번째로 들어갔을 때 값을 꺼내면, 3이 먼저 나간 후 2, 마지막으로 1이 나오는 구조입니다.
아래 예제 코드를 통해 데이터를 넣고 꺼내보도록 하겠습니다.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
Stack<string> history = new Stack<string>();
// Push: 데이터 추가
history.Push("페이지1");
history.Push("페이지2");
history.Push("페이지3");
// Peek: 가장 위 확인
Console.WriteLine($"현재 페이지: {history.Peek()}");
// Pop: 데이터 꺼내기
Console.WriteLine($"뒤로가기: {history.Pop()}");
}
}
Stack은 기본적으로 Push를 통해 값을 넣을 수 있으며, Peek를 통해 가장 최근에 들어온 데이터를 확인할 수 있습니다. 또한 Pop을 사용하여 가장 최근에 들어온 데이터를 꺼낼 수 있습니다.
스택은 아래 상황에서 사용하기 편합니다.
- 뒤로가기 기능 (웹 브라우저, 앱 등)
- 수식 계산 (연산자 우선순위 처리)
- 재귀 알고리즘 구현 (함수 호출 스택)
- 문자열 괄호 검사 (예: 올바른 괄호 문자열인지 확인)
- DFS (깊이 우선 탐색) 구현
큐 역시 데이터를 저장하고 꺼낼 수 있는 구조입니다. 다만 큐의 경우에는 먼저 들어온 값을 먼저 꺼내는 선입선출(FIFO; First In First Out) 구조를 보여줍니다.

1이 첫번째, 2가 두번째, 3이 세번째로 들어갔을 때 값을 꺼내면, 1이 먼저 나간 후 2, 마지막으로 3이 나오는 구조입니다.
아래 예제 코드를 통해 데이터를 넣고 꺼내보도록 하겠습니다.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
Queue<string> printQueue = new Queue<string>();
// Enqueue: 데이터 추가
printQueue.Enqueue("문서1");
printQueue.Enqueue("문서2");
printQueue.Enqueue("문서3");
// Peek: 가장 앞 확인
Console.WriteLine($"대기 중인 문서: {printQueue.Peek()}");
// Dequeue: 데이터 꺼내기
Console.WriteLine($"출력 중: {printQueue.Dequeue()}");
}
}
Queue는 기본적으로 Enqueue를 통해 값을 넣을 수 있으며, Peek를 통해 가장 최근에 들어온 데이터를 확인할 수 있습니다. 또한 Dequeue를 사용하여 가장 나중에 들어온 데이터를 꺼낼 수 있습니다.
큐는 아래 상황에서 사용하기 편합니다.
- 작업 처리 대기열 (프린터, 스레드 작업 등)
- 이벤트 처리 시스템
- 실시간 메시지 처리
- 턴제 시스템
- 너비 우선 탐색(BFS) 구현
위에서 말했듯, Stack과 Queue는 출력하는 데에 차이점이 존재합니다. Stack의 경우 먼저 들어온 값이 제일 나중에 꺼내지지만, Queue의 경우네는 먼저 들어온 값이 먼저 꺼내집니다.
따라서 Stack은 윗 부분만 사용하면 되니까 데이터 접근 방식이 단방향이고, Queue는 위에 쌓이지만 꺼내지는건 아랫 부분부터 꺼내지므로 양방향을 사용합니다.
Stack과 Queue는 모두 데이터를 저장하고 처리하는 자료구조이지만, 데이터가 처리되는 순서에 따라 완전히 다른 목적과 상황에서 사용됩니다.
다음 포스트에서는 Dictionary에 대해 작성해 보도록 하겠습니다.