Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트 큐(Queue) 클래스 완벽 구현 가이드

큐(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) 기반 구현이나 두 개의 스택을 조합한 방식을 고려하는 것이 좋습니다.