자바스크립트의 실행 컨텍스트를 공부하다 보면 콜 스택(Call Stack) 이라는 개념이 꼭 등장한다.
처음엔 단순히 함수가 쌓였다가 빠진다 정도로만 이해했는데, 그 구조를 제대로 이해하려면 결국 스택(Stack) 이라는 자료구조 자체를 알아야 한다는 걸 깨달았다.
이번 글에서는 실행 컨텍스트를 지탱하는 기반 구조인 스택 자료구조를 공부해보려고 한다.
Stack이란?
스택은 후입선출(Last In, First Out = LIFO) 구조의 자료구조다.
나중에 들어온 데이터가 먼저 나가는 구조를 가진다.
스택은 보통 3 가지 핵심 연산으로 구성된다.
| push(item) | 새로운 데이터를 스택의 맨 위(top)에 추가 |
| pop() | 스택의 맨 위 데이터를 제거하고 반환 |
| peek() | 스택의 맨 위 데이터를 제거하지 않고 확인 |
간단한 자바스크립트 예시를 보면 나중에 들어온 3이 먼저 출력되는걸 보면 “후입선출(LIFO)” 구조라는 걸 확인할 수 있다.
const stack = [];
stack.push(1);
stack.push(2);
stack.push(3);
console.log(stack); // [1, 2, 3]
const top = stack.pop();
console.log(top); // 3
console.log(stack); // [1, 2]
위 예제에서는 push 와 pop 만 살펴보았다.
다음은 peek과 isEmpty 에 대해서도 알아보자!
peek()
스택의 맨 위 데이터를 확인만 한다.
데이터를 제거하지 않는다.
Stack<Number> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
// 마지막에 넣은 값만 확인하고 제거하지는 않는다
System.out.println(stack.peek()); // 3
자바(Java) 에서는 자바스크립트와 다르게 Stack 클래스가 표준 라이브러리로 제공돼,
거기에 peek() 메서드가 정식으로 포함되어 있어 예제는 java로 작성했다.
Javascript 예제는 아래와 같다. peek()은 단순히 stack[stack.length - 1]로 확인 가능 하다.
const top = stack[stack.length - 1];
console.log(top); // 20
간단하게 Stack 클래스 구현을 해보면 아래와 같다.
class Stack {
constructor() {
this.items = [];
}
push(item) {
this.items.push(item);
}
pop() {
return this.items.pop();
}
peek() {
return this.items[this.items.length - 1];
}
isEmpty() {
return this.items.length === 0;
}
size() {
return this.items.length;
}
}
const stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
console.log(stack.peek()); // 3
stack.pop();
console.log(stack.isEmpty()); // false
console.log(stack.size()); // 2
이런 Stack이 어디에 쓰이는 걸까?
스택은 단순한 자료구조 같지만, 실제로 아래와 같이 굉장히 다양한 곳에서 쓰인다.
| 브라우저 뒤로가기 | 방문 기록을 스택으로 관리 |
| Undo / Redo 기능 | 실행 이력 저장 및 되돌리기 구현 |
| 재귀 함수 호출 관리 | 함수가 중첩 호출될 때 스택을 사용해 순서를 관리 |
| 깊이 우선 탐색 (DFS) | 탐색 순서를 스택 기반으로 구현 |
스택은 정말 단순하지만, 최근의 것부터 처리한다는 명확한 규칙 덕분에
브라우저, 알고리즘, 컴파일러 등 수많은 시스템의 기본 단위로 활용된다.
어떤 복잡한 프로그램이라도 결국 데이터를 쌓고, 빼고, 확인하는 이 단순한 구조 위에서 돌아가는 것이다.
때문에 이 Stack 구조를 아는건 중요한 것 같다.
'공부 > 자료구조' 카테고리의 다른 글
| [자료구조] Hash Table (해시 테이블) 알아보기 (0) | 2025.10.22 |
|---|