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

자바스크립트로 PriorityQueue(우선순위 큐)의 모든 요소 한 번에 비우기

우선순위 큐(PriorityQueue)를 구현하다 보면 저장된 모든 요소를 한 번에 삭제하고 큐를 초기 상태로 되돌려야 하는 경우가 종종 있습니다. 자바스크립트에서는 별도의 복잡한 로직 없이, 내부 컨테이너(container)를 빈 배열로 다시 할당하는 것만으로 간단하게 해결할 수 있습니다.

clear() 메서드 구현

큐 클래스 내부에 아래와 같이 clear() 메서드를 추가하면 됩니다.

clear() {
    this.container = [];
}

이 방식이 동작하는 원리는 간단합니다. this.container가 기존 배열 대신 새로운 빈 배열을 참조하도록 재할당되면, 이전 배열은 더 이상 참조되지 않으므로 자바스크립트의 가비지 컬렉터(Garbage Collector)가 자동으로 메모리를 회수합니다. 따라서 요소를 하나씩 순회하며 삭제하는 dequeue()를 반복 호출하는 것보다 훨씬 효율적입니다.

사용 예제

실제로 clear() 메서드가 정상적으로 작동하는지 확인해 보겠습니다.

let q = new PriorityQueue(4);
q.enqueue("Hello", 3);
q.enqueue("World", 2);
q.enqueue("Foo", 8);
q.display();
q.clear();
q.display();

실행 결과

위 코드를 실행하면 다음과 같은 출력을 얻을 수 있습니다.

[ { data: 'World', priority: 2 },
  { data: 'Hello', priority: 3 },
  { data: 'Foo', priority: 8 } ]
[ ]

출력 결과를 보면, 첫 번째 display() 호출 시에는 우선순위에 따라 정렬된 세 개의 요소가 출력되지만, clear() 호출 후에는 큐가 완전히 비어 있는 것([ ])을 확인할 수 있습니다.

참고 사항

만약 우선순위 큐의 최대 용량(maxSize) 정보를 함께 유지해야 한다면, clear() 실행 후에도 해당 속성은 그대로 유지되므로 걱정할 필요가 없습니다. 다만 큐가 비어 있을 때 peek()dequeue()를 호출하는 상황에 대비해, 내부적으로 빈 큐 여부를 검사하는 로직을 함께 두는 것이 안전합니다.