본문 바로가기

기술면접 준비

스택(Stack)과 큐(Queue)란 무엇일까요?

📕 오늘의 질문

스택과 큐에 대해 설명해주세요.

 

스택(Stack)이란?

스택이란 객체가 한 방향으로 삽입되고 삭제되는 선형 데이터 구조입니다. LIFO (Last In First Out) 방식을 사용하여, 마지막으로 들어온 객체가 가장 먼저 팝 됩니다. 팝은 스택 내 객체의 삭제를 말하며, 스택에 객체를 삽입하는 것은 푸시라고 말합니다.

 

스택은 한 번에 한 가지 일만 처리할 수 있습니다.

→ 그렇기 때문에 자바스크립트를 single threaded 언어라고 부릅니다.

위 그림처럼 스택은 LIFO 방식대로 하나씩 객체를 처리하게 됩니다. 그렇다면 setTimeout과 같이 시간이 걸리는 함수가 포함되어 있다면 어떻게 될까요? setTimeout에 설정된 시간을 모두 기다린 뒤 다음 객체를 처리할까요?

 

그렇지 않습니다. setTimeout의 경우에는 스택에 쌓아두지 않고, 대기실로 보내버립니다. setTimeout 외에도 대기실로 보내지는 코드가 몇 가지 더 있습니다.

 

대기실로 보내는 코드:

Ajax 요청

이벤트리스너

setTimeout 등

 

대기가 끝난 코드는 큐로 향합니다. 대기가 끝난 코드는 순서대로 큐에서 줄 세워지고, 큐는 스택이 비었을 때 코드를 스택으로 보냅니다.

그렇다면 큐(Queue)란 무엇일까요?

큐란 rear로 객체를 삽입하고 front로 객체를 삭제하는 선형 데이터 구조입니다. 큐는 FIFO(First In First Out) 방식을 사용하고 있어, 가장 먼저 들어온 객체가 가장 먼저 처리되어 삭제됩니다. 이때 객체의 삽입을 Enqueue, 삭제를 Dequeue라고 합니다. 그리고 큐에는 첫 번째 객체와 마지막 객체를 가리키는 front와 rear 포인터가 항상 존재합니다.

 

참고자료

코딩애플, 개발자 90%가 모르는 자바스크립트 동작원리 (Stack, Queue, event loop)

Geeks for Geeks, Difference between Stack and Queue Data Structures