
• 큐(queue)는 먼저 삽입된 데이터가 먼저 추출되는 자료구조(data structure)다.
• 예시) 버스 정류장에서 먼저 줄을 선 사람이 먼저 버스를 탄다
알바할 때 공기밥을 미리 퍼놓고 보관함에 넣어놨더니 사장님 왈 "선입선출로 정리해!"
스택(stack)과 더불어서 큐(Queue)는 코드를 작성할 때(코딩 테스트를 포함) 정말 자주 쓰이는 필수 자료구조이다.
필요에 따라 삽입과 삭제를 이용하여 데이터를 다룰 수 있다.
선입선출이라고 보면 된다.

JavaScript에서는 파이썬의 Dictionary 자료형(JS에는 이와 비슷한 것 으로 객체 리터럴)을 이용하여 큐(queue)를 구현하면 간단하다.
class Queue {
constructor() {
this.items = {};
this.headIndex = 0;
this.tailIndex = 0;
}
enqueue(item) {
this.items[this.tailIndex] = item;
this.tailIndex++;
}
dequeue() {
const item = this.items[this.headIndex];
delete this.items[this.headIndex];
this.headIndex++;
return item;
}
peek() {
return this.items[this.headIndex];
}
getLength() {
return this.tailIndex - this.headIndex;
}
}
// 구현된 큐(Queue) 라이브러리 사용
queue = new Queue();
// 삽입(5) - 삽입(2) - 삽입(3) - 삽입(7)
// - 삭제() - 삽입(1) - 삽입(4) - 삭제()
queue.enqueue(5);
queue.enqueue(2);
queue.enqueue(3);
queue.enqueue(7);
queue.dequeue();
queue.enqueue(1);
queue.enqueue(4);
queue.dequeue();
// 먼저 들어온 순서대로 출력
while (queue.getLength() != 0) {
console.log(queue.dequeue());
}
// 결과
// 3
// 7
// 1
// 4
사실 자바스크립트를 사용하다보면 웬만하면 처음으로 사용하는 자료구조가 스택(stack)이다.
그런데 스택을 사용하다보면 "왜 반대로 선입선출 방식은 없지? 왜 지원을 안 하지?" 이런 생각이 들 것이다.
이런 식으로 직접 큐(Queue)를 구현하면 선입선출도 사용 가능하다!
프론트에서는 사실 리액트가 지배하는 세상이라 함수형 프로그래밍만 하면 되기 대문에 class로 구현하는 것이 익숙치 않을 수 있는데, 사실 요즘 프론트는 프론트만 해서는 살아남을 수 없다. 그런의미로 class도 익숙해지자.