Stack의 개념
Stack은 마치 데이터를 쌓아 뒀다가 산출하는 것 같은 형태의 후입선출 구조를 따르는 선형 자료구조이다.
Stack이라는 명칭은 쌓인 더미의 형태를 뜻한다. 카드나 접시 혹은 동전을 쌓아 두었다면 중간 혹은 아래의 것부터 꺼낼 수 없고 위의 것부터 꺼낼 수밖에 없다. Stack은 이와 같은 구조를 가지기 때문에 해당 명칭으로 명명되었다.
Stack 구조에서의 명칭
데이터를 삽입할 때는 Push, 삭제될 때는 Pop이라고 하며, 선입선출법(FIFO, First In - First Out)의 구조를 가지는 큐(Queue)와는 명칭이 다르다. 위 그림과 같이 Stack의 데이터는 나중에 Push된 순으로만 Pop할 수 있다. 또한 Stack이 가득 찬 상태를 Full, 비어 있는 상태를 Empty라고 한다.
Stack의 응용
- Java에서의 활용 예시
Stack<Integer> stack = new Stack<>();
stack.push(5);
stack.push(4);
stack.push(3);
System.out.println(stack.pop()); // 3
System.out.println(stack); // [5, 4]
System.out.println(stack.peek()); // 4
System.out.println(stack.get(1)); // 4
System.out.println(stack.contains(4)); // true
System.out.println(stack.size()); // 2
System.out.println(stack.isEmpty()); // false
stack.clear();
System.out.println(stack.isEmpty()); // true
가장 나중에 투입된 것이 가장 먼저 나가는 후입선출법(LIFO, Last In - First Out)의 구조를 따르고 있으며, 이는 대표적으로 JVM(Java Virtual Machine) stack memory에 응용되었을 뿐만 아니라 회계학에서 재고자산 계산법의 일종이기도 하다. 실제 기업의 업무에 해당하는 재고관리 과정에서도 이용되는 점에서 알 수 있듯이, 소프트웨어를 통해 현실에서 발생하는 문제를 계산하거나 해결하는 일(비즈니스 로직)에 응용될 수 있다.
Stack은 이외에도 함수 호출, 재귀, 뒤로 가기 기능 등에 활용될 수 있다.
'Computer Science > Data Structure' 카테고리의 다른 글
Heap 구조의 이해 (0) | 2023.06.17 |
---|---|
Linked List 구조의 이해 (0) | 2023.06.16 |
Hash Map 구조의 이해 (0) | 2023.06.15 |
배열(Array) 구조의 이해 (0) | 2023.06.14 |
큐(Queue) 구조의 이해 (0) | 2023.06.13 |