큐(Queue)는 FIFO(First In, First Out, 선입선출) 방식으로 동작하는 대표적인 선형 자료구조입니다. 먼저 들어온 데이터가 먼저 나가는 구조 덕분에 작업 대기열 처리, 이벤트 관리, BFS(너비 우선 탐색) 등 다양한 분야에서 널리 활용됩니다.
아래는 자바스크립트 클래스 문법으로 작성한 큐의 완전한 구현 예제입니다. 최대 크기 설정부터 요소 추가·제거, 맨 앞 요소 확인, 초기화 기능까지 모두 포함되어 있습니다.
큐 클래스 구현 예제
class Queue {
constructor(maxSize) {
// 최대 크기가 지정되지 않으면 기본값 10으로 설정
if (isNaN(maxSize)) {
maxSize = 10;
}
this.maxSize = maxSize;
// 큐의 값을 저장할 배열 초기화
this.container = [];
}
// 개발 중 모든 값을 확인하기 위한 헬퍼 함수
display() {
console.log(this.container);
}
// 큐가 비어 있는지 확인
isEmpty() {
return this.container.length === 0;
}
// 큐가 가득 찼는지 확인
isFull() {
return this.container.length >= this.maxSize;
}
enqueue(element) {
// 큐가 가득 찼는지 확인
if (this.isFull()) {
console.log("Queue Overflow!");
return;
}
// 뒤쪽에 요소를 추가하므로 push 사용
this.container.push(element);
}
dequeue() {
// 비어 있는지 확인
if (this.isEmpty()) {
console.log("Queue Underflow!");
return;
}
return this.container.shift();
}
peek() {
if (this.isEmpty()) {
console.log("Queue Underflow!");
return;
}
return this.container[0];
}
clear() {
this.container = [];
}
}주요 메서드 설명
- constructor(maxSize): 큐의 최대 크기를 설정합니다. 값을 전달하지 않으면 기본값인 10이 적용됩니다.
- enqueue(element): 큐의 뒤쪽(rear)에 새 요소를 추가합니다. 큐가 가득 차 있으면 오버플로우 메시지를 출력하고 추가하지 않습니다.
- dequeue(): 큐의 앞쪽(front)에서 요소를 제거하고 반환합니다. 큐가 비어 있으면 언더플로우 메시지를 출력합니다.
- peek(): 요소를 제거하지 않고 맨 앞의 요소만 확인합니다.
- isEmpty() / isFull(): 큐가 비어 있는지 또는 가득 찼는지 여부를 불리언 값으로 반환합니다.
- clear(): 큐의 모든 요소를 제거하여 초기 상태로 되돌립니다.
참고로 배열의 shift() 메서드는 첫 번째 요소를 제거한 뒤 나머지 요소들을 앞으로 당기기 때문에 O(n)의 시간 복잡도를 가집니다. 대용량 데이터를 다루는 성능 민감 환경에서는 연결 리스트(Linked List) 기반 구현이나 두 개의 스택을 조합한 방식을 고려하는 것이 좋습니다.