Stack 클래스
는 나중에 넣은 데이터가 먼저 나오는 LIFO(Last In First Out, 후입선출)
구조의 자료구조 Stack을 구현한 클래스이자 Vector를 상속한 클래스입니다. JVM의 스택 메모리가 자바에서 Stack을 이용한 대표적인 사례입니다.
여기서는 스택에 대해 자세하게 설명하지 않습니다. 따라서 스택의 개념들은 Stack포스트를 참조해주세요.
다만, Vector를 이야기 했을때 제기됐던 동기화의 문제나, Vector를 상속하면서 발생한 LIFO 원칙 위반 등의 문제로 인해 Stack 자체를 사용할 일은 크게 없습니다.
스택
에서는 요소를 삽입하는 것을 push
, 요소를 삭제하는 것을 pop
이라고 부릅니다. 이때 데이터는 배열의 형태로 데이터를 저장합니다.
스택은 다음과 같이 선언합니다.
Stack<E> 변수명 = new Stack<E>();
스택의 주요 메소드는 다음과 같습니다.
메소드 | 설명 |
---|---|
boolean empty() | 스택이 비었는지 여부를 반환 |
E peek() | 스택의 가장 위의 요소를 반환 |
E pop() | 스택의 가장 위의 요소를 팝(삭제) |
E push(E e) | 스택에 e를 삽입 |
int search(Object o) | 스택에서 o의 위치를 찾아서 반환 (위(peek)에서부터 1으로 카운트) |
다음 코드는 Stack을 선언하고 메소드들을 이용하는 예제입니다.
public class Main {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<Integer>();
stack.push(1); //스택 요소 삽입 - 푸시
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
System.out.println(stack);
System.out.println(stack.peek()); //스택의 가장 꼭대기의 요소 출력
System.out.println(stack.search(4)); //4의 위치를 찾음. peek에서 1로 시작해서 카운트
stack.pop(); //스택 요소 삭제 - 팝
System.out.println(stack);
}
}
Queue
는 먼저 들어온 데이터가 먼저 나가는 FIFO(First In First Out, 선입선출)
구조의 자료구조 Queue를 구현한 인터페이스입니다. Queue
는 쓰레드풀
이라는 쓰레드 관리 기법에서 사용됩니다.
앞에서 소개한 Stack은 클래스고 Queue는 인터페이스임에 주의하세요.
Queue
인터페이스를 구현한 대표적인 클래스가 LinkedList입니다.
Queue
에서 제공하는 메소드들은 다음과 같습니다.
메소드 | 설명 |
---|---|
boolean add(E e) | 요소 e 삽입. 실패시 예외 반환 |
E element() | 큐의 헤드(가장 앞)을 반환 |
boolean offer(E e) | 요소 e를 삽입 |
E peek() | 큐의 헤드 반환. 빈 큐는 null 반환 |
E poll() | 큐의 헤드를 삭제. 빈 큐는 null 반환 |
E remove() | 큐의 헤드 삭제. 빈큐는 예외 반환 |
public class Main {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>(); //구현 클래스를 통해 생성
queue.offer(1); //큐에 요소 삽입
queue.offer(2);
queue.offer(3);
System.out.println(queue);
System.out.println(queue.peek()); //큐의 헤드 출력
queue.poll(); //큐의 요소 삭제
System.out.println(queue);
System.out.println(queue.peek()); //큐의 헤드 출력
}
}