공부/자료구조

[자료구조] Stack (스택) 알아보기

dev_jiwonpark 2025. 10. 22. 23:34

자바스크립트의 실행 컨텍스트를 공부하다 보면 콜 스택(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