Java

[Java] 스택 - LinkedList / Deque / Stack

bornsoon 2025. 5. 1. 17:23

결론부터 말하면 스택을 구현하기 위한 클래스로는

Deque > LinkedList > Stack (권장 X)  순으로 좋다!


 

1. Deque<Integer> stack = new ArrayDeque<>(); 

  • 클래스: java.util.ArrayDeque
  • 상속 구조: Deque 구현체
  • 특징:
    • 배열 기반이지만 자동으로 크기 조절됨
    • push(), pop(), peek() 사용 가능 (Deque 인터페이스)
    • null 저장 불가
    • Stack보다 훨씬 빠름 (동기화 X, 최신 컬렉션 구조)
  • 권장 여부: ✅ 최고의 선택 (성능, 설계 모두 우수)

2. LinkedList<Integer> stack = new LinkedList<>();

  • 클래스: java.util.LinkedList
  • 상속 구조: Deque 구현체
  • 특징:
    • addFirst(), removeFirst(), peekFirst()를 이용해 스택처럼 사용 가능
    • 이중 연결 리스트 구조 → 삽입/삭제에 강점
    • 메모리 사용이 많을 수 있음 (노드마다 포인터 포함)
  • 장점: 유연하고 다양한 작업에 적합
  • 장 여부: ⚠️ 가능하지만, 단순한 스택 작업에는 ArrayDeque가 더 적합

3. Stack<Integer> stack = new Stack<>();

  • 클래스: java.util.Stack
  • 상속 구조: Vector를 상속 (Vector는 동기화된 List)
  • 특징:
    • 오래된 클래스 (Java 1.0부터 존재)
    • push(), pop(), peek() 제공
    • 동기화(synchronized)가 되어 있어 멀티스레드 환경에서 안전하지만, 단일 스레드에서는 느릴 수 있음.
  • 권장 여부: ❌ 요즘은 사용 권장되지 않음. (성능, 설계 측면에서 더 나은 대안 존재

 

자료구조 장점 단점  현재 사용 권장 여부
Deque 빠르고 효율적 null 저장 불가 적극 권장
LinkedList 유연성, 다양한 기능 메모리 많이 씀 상항에 따라
Stack 직관적인 API 오래됨, 느림 비권장

 

728x90