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

자바스크립트에서 큐(Queue) 직접 구현하기

자바스크립트의 배열(Array)은 사실 큐(Queue)에 필요한 거의 모든 기능을 이미 제공하지만, 이번 글에서는 직접 나만의 Queue 클래스를 구현해 보겠습니다. 우리가 만들 클래스는 다음과 같은 메서드들을 가집니다.

  • enqueue(element): 큐에 요소를 추가하는 함수
  • dequeue(): 큐에서 요소를 제거하는 함수
  • peek(): 큐 맨 앞(front)에 있는 요소를 반환하는 함수
  • isFull(): 큐가 설정된 요소 개수 제한에 도달했는지 확인하는 함수
  • isEmpty(): 큐가 비어 있는지 확인하는 함수
  • clear(): 큐의 모든 요소를 제거하는 함수
  • display(): 배열(큐)의 전체 내용을 출력하는 함수

먼저 큐의 최대 크기(maxSize)를 인자로 받는 생성자와, 이후 다른 메서드들을 구현할 때 유용하게 활용할 헬퍼 함수를 포함한 간단한 클래스부터 정의해 보겠습니다. 스택(Stack)을 구현할 때와 마찬가지로, 큐 역시 배열을 기반으로 구현합니다.

예제 코드

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;
    }
}

isFull과 isEmpty 메서드 살펴보기

위 코드에는 큐가 가득 찼는지 또는 비어 있는지를 확인하는 두 가지 메서드인 isFullisEmpty도 함께 정의했습니다.

isFull()은 컨테이너 배열의 길이가 maxSize보다 크거나 같은지 검사한 뒤, 그 결과를 불리언(Boolean) 값으로 반환합니다.

isEmpty()는 컨테이너의 크기가 0인지 확인하여 큐가 비어 있는지 판단합니다.

이 두 메서드는 이후 enqueue나 dequeue 같은 다른 연산을 정의할 때 매우 유용하게 활용됩니다. 앞으로 정의하는 모든 메서드는 이 Queue 클래스 내부에 작성됩니다.