카테고리 없음

스택 vs 큐, 헷갈리지 말자! 한눈에 보는 특징과 실무 활용 사례

kguidebook0001 2026. 2. 13. 10:03

자료구조의 양대 산맥인 스택(Stack)과 큐(Queue)는 생김새는 비슷해 보이지만, 정반대의 성격을 가진 이란성 쌍둥이와 같습니다. 개발자 면접에서 "스택과 큐의 차이점을 설명하세요"라는 질문이 단골로 나오는 이유는, 이 두 구조의 차이를 이해하는 것이 곧 '데이터의 흐름(Flow)'을 제어하는 능력과 직결되기 때문입니다. 단순히 LIFO와 FIFO라는 용어의 차이를 넘어, 실제 현업 시스템 아키텍처에서 어떤 상황에 스택을 쓰고 어떤 상황에 큐를 써야 하는지, 그 결정적 기준과 활용 사례를 완벽하게 정리해 드립니다.

1. 구조적 차이점: 막힌 골목 vs 뚫린 터널

가장 먼저 시각적인 구조의 차이를 명확히 해야 합니다. 데이터가 들어오고 나가는 '문(Gate)'이 몇 개인지, 어디에 달려 있는지가 핵심입니다.

1-1. 스택: 입출구가 하나인 폐쇄형 구조

스택은 바닥이 막힌 프링글스 통이나 엘리베이터와 같습니다. 나가는 문이 따로 없기 때문에 들어온 문으로 다시 나가야 합니다.

  • 데이터 흐름: 수직적입니다. 쌓고(Push), 내립니다(Pop).
  • 핵심 철학: "가장 최근의 것을 가장 먼저 처리한다." (최신순)
  • 접근성: 오직 맨 위(Top)의 데이터만 볼 수 있습니다. 중간이나 바닥에 있는 데이터를 꺼내려면 위에 있는 것들을 다 치워야 합니다.

1-2. 큐: 입출구가 분리된 개방형 구조

큐는 양쪽이 뚫린 고속도로 터널이나 놀이공원 대기줄과 같습니다. 입구(Rear)로 들어와서 출구(Front)로 나갑니다.

  • 데이터 흐름: 수평적입니다. 뒤에서 밀어 넣고(Enqueue), 앞에서 당깁니다(Dequeue).
  • 핵심 철학: "가장 오래된 것을 가장 먼저 처리한다." (선착순)
  • 접근성: 맨 앞(Front)과 맨 뒤(Rear)의 데이터에 접근이 용이합니다.

2. 한눈에 보는 비교표 (Cheatsheet)

비교 항목 스택 (Stack) 큐 (Queue)
별칭 LIFO (Last-In, First-Out) FIFO (First-In, First-Out)
주요 용도 역순 추적, 되돌리기, 재귀 순차 처리, 버퍼링, 스케줄링
메서드명 push() / pop() enqueue() / dequeue() (또는 offer/poll)

3. 실무에서는 어떻게 쓰일까? (Use Cases)

이론보다 중요한 것은 "그래서 내 코드 어디에 써야 하는데?"입니다. 각 자료구조가 해결하는 문제의 본질을 파악해 봅시다.

3-1. 스택이 필요한 순간: "잠시 멈추고 돌아가야 할 때"

스택은 작업의 문맥(Context)을 저장했다가 복원해야 할 때 쓰입니다.

  • IDE의 괄호 검사기: 코딩할 때 `({[]})` 괄호 짝이 맞는지 확인할 때, 여는 괄호를 스택에 넣고 닫는 괄호를 만날 때마다 빼서 검사합니다.
  • 함수 콜 스택(Call Stack): 에러가 났을 때 로그를 보면 `main() -> logic() -> error()` 순서로 호출 경로가 나옵니다. 컴퓨터가 함수 호출 순서를 스택에 기억해 두었기 때문입니다.
  • 문자열 뒤집기: "Hello"를 스택에 넣었다 빼면 "olleH"가 됩니다.

3-2. 큐가 필요한 순간: "속도 차이를 조절해야 할 때"

큐는 생산자(만드는 놈)와 소비자(쓰는 놈) 사이의 완충지대(Buffer) 역할을 합니다.

  • 메시지 브로커 (Kafka, RabbitMQ): 주문 시스템에서 1초에 1만 건의 주문이 폭주할 때, DB가 다운되지 않도록 큐에 주문을 쌓아두고 천천히 처리합니다. 백엔드 개발의 핵심 기술입니다.
  • BFS (너비 우선 탐색): 최단 경로를 찾을 때, 현재 위치에서 갈 수 있는 곳들을 큐에 등록하고 순서대로 방문합니다.
  • 캐시(Cache) 관리: 오래된 데이터부터 삭제하는 정책(LRU 등)을 구현할 때 큐의 개념이 사용됩니다.
[핵심 요약]
1. 스택은 나중에 들어온 것이 먼저 나가는 구조로, '과거로의 회귀'가 필요한 로직에 쓰입니다.
2. 는 먼저 들어온 것이 먼저 나가는 구조로, '순서 보장''속도 완충'이 필요한 로직에 쓰입니다.
3. 실무에서 함수 호출 관리는 스택이, 서버 대기열 관리는 큐가 담당한다는 점을 기억하세요.