[Java] 스택 자료구조: Stack과 Deque 비교

2025. 1. 10. 10:32·TIL (Today I Learned)

스택

스택(stack)은 제한적으로 접근할 수 있는 나열 구조이다. 그 접근 방법은 언제나 목록의 끝에서만 일어난다. 


스택은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 및 후입 선출(LIFO - Last In First Out) 구조로 되어 있다. 자료를 넣는 것을 '밀어넣는다' 하여 푸쉬(push)라고 하고 반대로 넣어둔 자료를 꺼내는 것을 팝(pop)이라고 하는데, 이때 나중에(최근에) 넣은(푸쉬한) 값이 먼저 나오게 된다.

 


Stack 클래스

LIFO(Last In First Out) 방식으로 동작하는 `Stack`클래스

`java.util`패키지에 포함된 클래스이다.

Stack 선언

import java.util.Stack;

// 선언 방법
Stack<Type> stack = new Stack<>();

 


주요 메서드

1. `push(E item)`

  • 스택의 맨 위에 요소를 추가
stack.push(10); // 10 추가

 

2. `pop()`

  • 스택의 맨 위 요소를 제거하고 반환
  • 스택이 비어있으면 `EmptyStackException` 발생
int top = stack.pop(); // 10 제거 후 반환

 

3. `peek()`

  • 스택의 맨 위 요소를 반환하지만, 제거하지는 않음
  • 스택이 비어있으면 `EmptyStackException` 발생
int top = stack.peek(); // 10 반환, 제거 X

 

4. `isEmpty()`

  • 스택이 비어있는지 확인
if (stack.isEmpty()) {
    System.out.println("스택이 비어있습니다.");
}

 

5. `search(Object o)`

  • 스택에서 해당 요소의 위치(1부터 시작)를 반환
  • 스택에 요소가 없으면 -1 반환
int position = stack.search(10); // 10의 위치 반환

 

6. `size()`

  • 스택 요소 개수를 반환
int size = stack.size(); // 스택 크기 확인

 


Deque 클래스

`Deque`(Double-Ended Queue)는 양쪽에서 삽입과 삭제가 가능한 자료구조이다.

Java에서 `Stack` 대신 사용할 수 있다.

`Deque`는 `ArrayDeque` 또는 `LinkedList`로 구현할 수 있으며, 스택보다 더 효율적인 대안이다.

 

Deque를 스택처럼 사용하는 방법

`Deque`는 LIFO(Last In First Out) 방식으로 동작하도록 메서드를 사용할 수 있다.

Deque 선언

import java.util.Deque;
import java.util.ArrayDeque;

// 선언 방법
Deque<Type> stack = new ArrayDeque<>();

 


주요 메서드

Stack 클래스의 주요 메서드와 동일하며, 차이가 있는 메서드에 대해서만 설명하겠다.

 

1. `pop()`

  • 비어있을 경우 `NoSuchElementException` 발생

2. `peek()`

  • 스택이 비어있으면 `null` 반환

 


Deque vs Stack

특징 Deque (ArrayDeque) Stack
동작 방식 양쪽에서 삽입/삭제 가능
(Queue로 활용 가능)
LIFO 전용
성능 빠름 상대적으로 느림 (메모리 사용 문제)
동기화 비동기 방 동기화로 인한 성능 저하
사용 스택을 구현할 때 대체로 사용 잘 사용하지 않음 (구식)

 


참고:
https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%83%9D

https://suover.com/java-%EC%9E%90%EB%B0%94-%EC%8A%A4%ED%83%9Dstack-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%82%AC%EC%9A%A9%EB%B2%95/

https://suover.com/java-%ec%9e%90%eb%b0%94-%ed%81%90queue-%ea%b0%9c%eb%85%90%ea%b3%bc-%ec%82%ac%ec%9a%a9%eb%b2%95/

https://s-y-130.tistory.com/79

 

저작자표시 비영리 변경금지 (새창열림)

'TIL (Today I Learned)' 카테고리의 다른 글

[Java] 상속(Inheritance)과 다형성(Polymorphism) 이해  (0) 2025.01.10
[Java] 예외 처리 방법: 기본 구조, throw/throws, 사용자 정의 예외  (1) 2025.01.10
[TIL] Java 계산기 만들기 과제 회고 🤓✏️  (2) 2025.01.09
[Java] 람다(Lambda)와 스트림(Stream) API 개념 및 예제  (0) 2025.01.07
[TIL] Java Enum과 Generic 활용하여 계산기 만들기 (25-01-06)  (1) 2025.01.06
'TIL (Today I Learned)' 카테고리의 다른 글
  • [Java] 상속(Inheritance)과 다형성(Polymorphism) 이해
  • [Java] 예외 처리 방법: 기본 구조, throw/throws, 사용자 정의 예외
  • [TIL] Java 계산기 만들기 과제 회고 🤓✏️
  • [Java] 람다(Lambda)와 스트림(Stream) API 개념 및 예제
기만나🐸
기만나🐸
공부한 내용을 기록합시다 🔥🔥🔥
  • 기만나🐸
    기만나의 공부 기록 🤓
    기만나🐸
  • 전체
    오늘
    어제
    • ALL (147)
      • TIL (Today I Learned) (56)
      • Dev Projects (15)
      • Algorithm Solving (67)
        • Java (52)
        • SQL (15)
      • Certifications (8)
        • 정보처리기사 실기 (8)
  • 인기 글

  • 태그

    DFS
    greedy
    Firebase
    백준
    Google Fonts
    bootstrap
    시뮬레이션
    websocket
    join
    programmers
    백트래킹
    java
    그리디
    BFS
    완전탐색
    mysql
    jpa
    sql
    자료구조
    프로그래머스
    HTML
    javascript
    CSS
    GROUP BY
    jwt
    BOJ
    dp
    다이나믹프로그래밍
    Subquery
    jQuery
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기만나🐸
[Java] 스택 자료구조: Stack과 Deque 비교
상단으로

티스토리툴바