스택(Stack)이란?
스택은 대부분의 프로그래밍 언어에서 널리 활용되는 추상 자료형(Abstract Data Type, ADT)입니다. 이름 그대로 실제 세계의 '쌓아 올린 물건'처럼 동작하는데, 카드 한 벌이나 접시 더미를 떠올리면 쉽게 이해할 수 있습니다. 새 접시는 항상 맨 위에 올리고, 꺼낼 때도 맨 위에서부터 꺼내는 방식입니다.

LIFO(후입선출) 구조
스택은 한쪽 끝(top)에서만 삽입과 삭제가 이루어집니다. 이러한 특성 때문에 스택은 LIFO(Last-In-First-Out, 후입선출) 자료구조로 분류됩니다. 즉, 가장 나중에 삽입된 요소가 가장 먼저 꺼내집니다.
- PUSH(푸시): 스택의 맨 위에 요소를 삽입하는 연산
- POP(팝): 스택의 맨 위에서 요소를 제거하는 연산
다음 다이어그램은 스택에서 일어나는 연산 과정을 보여줍니다.

자바스크립트로 구현하는 스택 클래스
다음은 스택을 표현하는 완전한 자바스크립트 클래스입니다. 최대 크기(maxSize)를 지정해 오버플로우를 방지하고, 스택이 비어 있는지 확인하는 기능까지 포함되어 있습니다.
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];
}
clear() {
this.container = [];
}
}주요 메서드 설명
- constructor(maxSize): 스택의 최대 크기를 설정합니다. 값을 지정하지 않으면 기본값 10이 적용됩니다.
- push(element): 스택이 가득 차 있으면 "Stack Overflow!" 메시지를 출력하고, 여유가 있다면 요소를 추가합니다.
- pop(): 스택이 비어 있으면 "Stack Underflow!" 메시지를 출력하고, 요소가 있다면 맨 위 요소를 제거합니다.
- peek(): 요소를 제거하지 않고 맨 위 요소만 확인합니다.
- isEmpty() / isFull(): 각각 스택이 비었는지, 가득 찼는지 여부를 불리언 값으로 반환합니다.
- clear(): 스택의 모든 요소를 제거하고 초기 상태로 되돌립니다.
참고: 원본 코드의 peek() 메서드에는 this.isEmpty()가 아닌 isEmpty()를 호출하는 오류가 있었습니다. 위 코드에서는 이 부분을 수정해 정상적으로 동작하도록 개선했습니다.