Stack 의 정의 : 데이터를 순서대로 쌓는 자료 구조
Stack 구조
차를 자료구조 stack, 아이들을 데이터로 비유해보자면
가장 먼저 들어간 아이는 가장 나중에 나올 수 있고, 가장 나중에 들어간 아이가 가장 먼저 나온다.
이런 자료구조 정책을 LIFO(Last In First OUT) 혹은 FILO(First In Last Out)이라고 부른다.
그래서 stack에 데이터를 넣는 것을 'push', 데이터를 꺼내는 것을 'pop'이라고 한다.
1. LIFO
public class stackEx {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
// ---------------------------
// 1<-2<-3<-4<-<5
// ---------------------------
System.out.println(stack.pop()); // 5
System.out.println(stack.pop()); // 4
System.out.println(stack.pop()); // 3
System.out.println(stack.pop()); // 2
}
}
2. 데이터는 하나씩 넣고 뺄 수 있다.
Stack 자료 구조는 데이터가 아무리 많이 있어도 하나씩 데이터를 넣고 뺀다.
3. 하나의 입출력 방향을 가지고 있다.
Stack의 실사용 예로는 브라우저의 뒤로 가기, 앞으로 가기 기능을 구현할 때이다.
ArrayListStack stack = new ArrayListStack()
stack.push(1); // [1]
stack.push(2); // [1, 2]
stack.push(3); // [1, 2, 3]
stack.push(4); // [1, 2, 3, 4]
stack.push(5); // [1, 2, 3, 4, 5]
System.out.println(stack.show()); // [1, 2, 3, 4, 5]
stack.pop(); // [1, 2, 3, 4]
stack.pop(); // [1, 2, 3]
System.out.println(stack.show()); // [1, 2, 3]
- 🔻ArrayList로 Stack을 사용할 때 주의해야 할 사항
ArrayList 클래스를 포함한 모든 자료구조 클래스에는 래퍼런스 타입의 데이터만 저장할 수 있다.- 🔻ArrayList로 Stack을 사용할 때 push, pop 이외에 필요한 메서드를 어떻게 구현할 수 있는가?
size(), peek(), show(), clear()- 🔻Java의 배열로 Stack을 구현했을때 어떤 단점이 존재하는가?
항상 최대 개수를 정해놔야지 사용이 가능하다. List는 개수에 한정되지 않아서 이러한 단점을 커버할 수 잇다.