Java Deque 인터페이스 마스터: 특징, 메서드, 실전 예제
Java Deque 인터페이스
Java의 Deque 인터페이스가 어떻게 다재다능한 양방향 큐를 제공하는지, 강력한 메서드를 실제 코드에서 어떻게 활용하는지 알아봅니다.
Deque 동작 원리
일반 큐가 후미에서만 인큐하고 앞에서만 디큐하는 것과 달리, Deque(Double-Ended Queue)는 양쪽 끝에서 요소를 추가하고 제거할 수 있습니다. 이 유연성 덕분에 LIFO, FIFO, 더 복잡한 데이터 처리 패턴에 모두 적합합니다.
Deque를 구현하는 클래스들
Deque를 사용하려면 다음 구체 구현체 중 하나를 선택하세요:
ArrayDeque – 빠른 비동기화 접근을 제공하는 크기 조절 가능 배열
LinkedList – null 요소를 허용하고 견고한 삽입 성능을 제공하는 이중 연결 리스트
코드에서 Deque 사용하기
먼저 인터페이스를 임포트하세요:
import java.util.Deque;
구체 클래스를 인스턴스화하세요:
// 배열 구현
Deque<String> animal1 = new ArrayDeque<>();
// LinkedList 구현
Deque<String> animal2 = new LinkedList<>();
이제 모든 Deque 연산을 사용할 수 있습니다.
핵심 Deque 메서드
Deque는 Queue를 확장하므로 모든 큐 메서드를 상속받습니다. 추가로 양쪽 끝 전용 연산을 제공합니다:
- addFirst(e) –
e를 앞에 삽입, 가득 차면 예외 발생
- addLast(e) –
e를 뒤에 추가, 가득 차면 예외 발생
- offerFirst(e) – 앞에 삽입 시도, 가득 차면
false 반환
- offerLast(e) – 뒤에 추가 시도, 가득 차면
false 반환
- getFirst() / getLast() – 첫/마지막 요소 조회, 비어있으면 예외 발생
- peekFirst() / peekLast() – 첫/마지막 요소 조회, 비어있으면
null 반환
- removeFirst() / removeLast() – 첫/마지막 요소 제거 및 반환, 비어있으면 예외 발생
- pollFirst() / pollLast() – 첫/마지막 요소 제거 및 반환, 비어있으면
null 반환
Deque를 스택으로 사용하기
레거시 Stack 클래스는 동기화되어 있고 효율성이 떨어집니다. Deque는 현대적인 비동기화 대안을 제공합니다:
push(e) – e를 앞에 추가
pop() – 앞 요소 제거 및 반환
peek() – 앞 요소 조회(제거 안 함)
ArrayDeque 실전 예제
import java.util.Deque;
import java.util.ArrayDeque;
class Main {
public static void main(String[] args) {
Deque<Integer> numbers = new ArrayDeque<>();
// Deque 채우기
numbers.offer(1); // 꼬리
numbers.offerLast(2); // 꼬리
numbers.offerFirst(3); // 머리
System.out.println("Deque: " + numbers);
// 양쪽 끝 조회
System.out.println("First Element: " + numbers.peekFirst());
System.out.println("Last Element: " + numbers.peekLast());
// 요소 제거
System.out.println("Removed First Element: " + numbers.pollFirst());
System.out.println("Removed Last Element: " + numbers.pollLast());
System.out.println("Updated Deque: " + numbers);
}
}
출력
Deque: [3, 1, 2] First Element: 3 Last Element: 2 Removed First Element: 3 Removed Last Element: 2 Updated Deque: [1]
자세한 내용은 공식 Java ArrayDeque 문서를 참조하세요.