위키득계정 ↗
기술

스택

스택기술
영문명
Stack
처리 원칙
후입선출 LIFO
추가 연산
Push
제거 연산
Pop
대표 활용
호출 상태, 깊이 우선 탐색, 실행 취소
스택은 가장 최근에 넣은 항목을 먼저 꺼내는 자료형이다. 값이 들어오고 나가는 순서를 제한하여 중첩된 작업의 복귀 순서나 탐색 상태를 관리한다.

연산이 정하는 자료형

스택에 A, B, C 순서로 넣으면 먼저 꺼내는 값은 C다. 항목을 추가하는 연산을 push, 맨 위 항목을 꺼내는 연산을 pop이라고 한다. 꺼내지 않고 맨 위의 값만 확인하는 연산도 제공할 수 있다.

스택은 배열이라는 저장 방식과 같은 개념이 아니다. 배열이나 연결 구조로 구현할 수 있으며, 구현 방식이 달라도 외부에서 관찰하는 후입선출 규칙은 유지된다.

중첩된 작업을 되돌아오기

함수가 다른 함수를 호출하면 나중에 원래 위치로 돌아와야 한다. 호출 스택은 복귀 위치와 지역 상태 등을 관리하는 데 쓰인다. 뒤에 시작한 호출이 먼저 끝나는 중첩 관계가 스택과 잘 맞는다.

그래프 탐색에서도 나중에 방문할 위치를 스택에 보관할 수 있다. 방문한 정점을 기록하는 별도의 상태가 없으면 같은 위치를 반복해서 탐색할 수 있으므로, 스택 하나만으로 전체 알고리즘이 완성되는 것은 아니다.

실행 취소와 복구

편집 작업을 순서대로 저장하면 가장 최근 변경부터 되돌릴 수 있다. 다시 실행 기능을 함께 만들 때는 별도의 이력과 현재 위치를 관리하는 등 추가 설계가 필요하다.

실행 취소는 단순히 작업 이름만 저장하는 것으로 충분하지 않을 수 있다. 되돌리는 데 필요한 이전 값이나 역연산 정보가 있어야 한다. 새 작업이 들어왔을 때 기존 복구 이력을 어떻게 처리할지도 정해야 한다.

용량과 경계 조건

빈 스택에서 값을 꺼내려 하거나, 정해진 용량을 넘겨 추가하려 할 때의 동작은 명시해야 한다. 오류를 반환할지 예외를 낼지에 따라 사용하는 코드도 달라진다.

배열을 확장하는 스택은 일부 추가 연산에서 재할당 비용이 들 수 있다. 호출 스택 또한 무제한이 아니므로 재귀 호출이 깊어지면 사용 가능한 공간을 넘을 수 있다.

관련 문서

자료 구조 / 재귀 / 큐 (자료 구조)