Stack - 스택 자료 구조

2024. 6. 17. 13:51김영한 Java/컬렉션 프레임워크

이 블록을 다음과 같이 아래쪽은 막혀 있고, 위쪽만 열려있는 통에 넣는다고 생각해보자. 위쪽만 열려있기 때문에 위쪽으로 블록을 넣고, 위쪽으로 블록을 빼야 한다. 

 

후입선출(LIFO)

여기서 가장 마지막에 넣은 3번 블록이 가장 먼저 나오는 것을 후입 선출이라 한다.

package collection.stack;

import java.util.Stack;

public class StackMain {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();

        stack.push(1);
        stack.push(2);
        stack.push(3);
        System.out.println(stack);


        //다음에 꺼낼 요소 확인(단순 조회)
        System.out.println("stack.peek() = " + stack.peek());


        //스택 요소 뽑기
        System.out.println();
        System.out.println("stack.pop() = " + stack.pop());
        System.out.println("stack.pop() = " + stack.pop());
        System.out.println("stack.pop() = " + stack.pop());
        System.out.println(stack);
    }
}

 

실행 결과

[1, 2, 3]
stack.peek() = 3

stack.pop() = 3
stack.pop() = 2
stack.pop() = 1
[]

실행 결과를 보면 1,2,3으로 입력하면 3,2,1로 출력되는 것을 확인할 수 있다. 나중에 입력한 값이 가장 먼저 나온다.

 

주의! - Stack클래스는 사용하지 말자

자바의 Stack 클래스는 내부에서 Vector라는 자료 구조를 사용한다. 이 자료 구조는 자바 1.0에 개발되었는데, 지금은 사용되지 않고 하위 호환을 위해 존재한다. 지금은 더 빠른 좋은 자료 구조가 많다. 따라서 Vector를 사용하는 Stack도 사용하지 않는 것을 권장한다. 대신에 이후에 설명할 Deque를 사용하는 것이 좋다.