스택이란?
- 데이터를 팬케이크를 쌓아올리듯이 데이터를 쌓아올린 형태로 자료를 구성하는 구현 방식
- 데이터가 이동하는 입구와 출구가 같다.
스택의 특징
- 같은 구조와 같은 크기의 데이터를 정해진 방향으로만 쌓을 수 있다.
- top으로 정한 한 곳으로만 접근하도록 제한되어 있다.
- top을 통해 들어온 데이터가 일정한 방향, 즉 아래에서 위로 차곡차곡 쌓이게 된다.
- top은 삽입과 삭제가 일어나는 위치로, 현재 스택의 가장 위에 있는 데이터 위치를 가리킨다.
- 새로운 데이터가 쌓이면 해당 데이터가 가장 위에 있으므로 해당 데이터가 top이 된다.
- 데이터를 삭제할 때는 가장 위에 있는 top부터 삭제할 수 있다.
- 데이터의 삽입·삭제 연산을 1개씩만 할 수 있다.
- 후입선출 (LIFO, Last-In-First-Out)
- 가장 마지막에 삽입된 데이터가 가장 먼저 삭제되는 특징
- 스택의 동작 구조다.
- 후입 선출을 뒤집어서 선입후출(FILO, First-In-Last-Out)이라고 부르기도 한다.
- 스택의 연산
- push
- 스택에서 top을 통해 새로운 데이터를 삽입하는 연산
- pop
- 스택에서 top을 통해 마지막 데이터를 삭제하는 연산
- push
구현하기
- Java에서는 스택을 구현하는 Stack 클래스가 존재한다.
- 다만 스택의 기본 이론과 다르게 데이터를 중간에 삽입하거나 삭제할 수도 있으며,
그런 연산 자체도 데이터 1건씩만 하는 게 아닌 여러 건씩 할 수 있다. - 이유는 Java의 Stack 클래스에 대하여 상속 및 구현된 클래스들을 살펴보면 목록에 대한 클래스들이 포함되어 있기 떄문이다.
- 예시
Stack<String> stackStr = new Stack<>();