스택(Stack)은 마지막에 넣은 데이터가 가장 먼저 나오는 LIFO(Last In, First Out) 방식의 대표적인 자료구조입니다. 이 글에서는 자바스크립트로 구현한 간단한 스택 클래스를 살펴본 뒤, 저장된 모든 요소를 한 번에 삭제하는 clear 연산을 추가하는 방법을 알아봅니다.
기본 스택 클래스 예제
class Stack {
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;
}
push(element) {
// 가득 찼다면 더 이상 추가하지 않음
if (this.isFull()) {
console.log("Stack Overflow!");
return;
}
this.container.push(element);
}
pop() {
// 비어 있다면 삭제할 요소가 없음
if (this.isEmpty()) {
console.log("Stack Underflow!");
return;
}
this.container.pop();
}
peek() {
if (this.isEmpty()) {
console.log("Stack Underflow!");
return;
}
return this.container[this.container.length - 1];
}
}isFull()은 컨테이너 배열의 길이가 maxSize와 같거나 클 때 true를 반환하고, isEmpty()는 컨테이너의 크기가 0인지 검사합니다. 그리고 push()와 pop()은 각각 스택에 새 요소를 추가하고 제거하는 역할을 담당합니다.
참고: 위 코드에서 isFull()과 peek()은 반드시 this.maxSize, this.isEmpty()처럼 this를 통해 클래스 멤버에 접근해야 정상적으로 동작합니다.
clear 연산 추가하기
스택의 내용을 모두 지우는 방법은 매우 간단합니다. container 프로퍼티를 새로운 빈 배열로 재할당하기만 하면 됩니다.
clear() {
this.container = [];
}이렇게 처리하면 기존에 담겨 있던 모든 요소가 사라지고, 스택은 처음 생성된 것과 같은 빈 상태가 됩니다.
동작 확인
let s = new Stack(2); s.push(10); s.push(20); s.display(); s.clear(); s.display();
출력 결과
[10, 20] []
push로 두 개의 요소를 추가했을 때는 [10, 20]이 출력되지만, clear() 호출 후에는 빈 배열 []이 출력되는 것을 확인할 수 있습니다.
응용: length 속성을 활용하는 방법
배열 객체 자체의 참조를 유지한 채 내부만 비우고 싶다면 this.container.length = 0;을 사용할 수도 있습니다. 이 방식은 해당 배열을 다른 변수에서 함께 참조하고 있을 때 특히 유용합니다.