
Stack
Data를 순서대로 쌓는 자료구조이다. 그렇기때문에 후입 선출의 구조를 가지고 있다.
한번에 하나의 데이터만 삽입/제거가 가능하며, 하나의 입출력 방향을 가지고 있다. (제한적 접근)
- Push : Stack에 데이터를 넣을 때
- Pop : Stack에 있는 데이터를 꺼낼 때
Stack의 특징
- 저장된 데이터를 가져오는 속도가 매우 빠르다.
스택에서 데이터를 삽입하거나 삭제할 때, 모든 데이터를 순회할 필요가 없기 때문이다.
- 별도의 라이브러리나, 모듈을 설치할 필요가 없다.
- 크기 제한이 없기때문에 메모리 사용량이 불필요하게 증가할 수 있다.
그래서 미리 스택의 크기를 정해두거나, 동적으로 크기를 조절하는 방법을 사용해야한다.
- JAVA에서 제공하는 Stack클래스 한정으로, 크기를 동적으로 조정하지 않는다.
- JAVA에서 제공하는 Stack클래스 한정으로, 중간에서 데이터를 삽입, 삭제할 수 있다.
Stack 클래스는 Vector 클래스를 상속받아 구현되어있기 때문이다.
stack을 사용하는 대표적인 예는 브라우저에서 이전,앞으로가기 페이지 이동을 할 때이다.
- 새로운 페이지로 접속할 때, 현재 페이지를 Prev Stack에 보관한다.
- 뒤로 가기 버튼을 누르면, 현재 페이지를 Next Stack에 보관하고 Prev Stack에 가장 나중에 보관된 페이지를 현재 페이지로 가져옵니다.
- 앞으로 가기 버튼을 누르면, Next Stack의 가장 마지막으로 보관된 페이지를 가져옵니다.
- 마지막으로 현재 페이지를 Prev Stack에 보관한다.
Queue
먼저 들어간 데이터가 먼저 나오는 구조이다.
data가 입력된 순서대로 처리할 때 주로 사용하며, 한번에 하나의 데이터만 삽입 / 제거 가능하다. 또한 두개의 입출력 방향을 가지고 있다. (입출력 방향이 하나면 나중에 들어온게 먼저 나가야함 ex_프링글스)
- Add : Queue에 데이터를 넣을 때
- Poll : Queue에 있는 데이터를 꺼낼 때(반환하고 제거함)
Queue의 특징
- Queue에 데이터를 삽입하는 순서와 삭제하는 순서사 동일하게 유지되어야하기 떄문에, 데이터 처리나 작업처리에서 순서가 중요한 경우에 유용하다.
- 그렇기때문에 중간에 있는 데이터를 조회하거나 수정하는 연산에는 적합하지않다.
- 삽입/삭제가 빈번하게 일어나는 상황에서 상대적으로 빠른 속도를 보이기 때문에 데이터나 작업을 차례대로 처리해야하는 상황에서 효과적으로 사용될 수 있다.
- 별도의 라이브러리나, 모듈을 설치할 필요가 없다.
- 크기 제한이 없어 메모리 낭비가 발생할 수 있다.
크기 제한이 있게 구현하려면 Queue인터페이스를 사용하지 않고 직접 구현하거나, 기존의 Queue인터페이스를 상속받아 크기 제한을 추가한 클래스를 구현해야한다.
- Java에서 제공하는 Queue 인터페이스의 경우 iterator() 메서드가 지원되지 않는다.
- Java에서 제공하는 Queue 인터페이스의 경우 remove(Object o) 메서드의 동작이 불명확하다.
poll()메서드를 사용하면 원하는 객체를 삭제할 수 있다.