[Java] Stack(스택) 자료구조

2025. 10. 17. 18:34Dev./Java

728x90
반응형

Stack

LIFO(Lasn In, First Out) 자료구조

즉 마지막에 넣은 데이터가 가장 먼저 나오는 자료구조이다. 웹 브라우저 뒤로가기 히스토리 동작을 생각해보면 알 수 있다.

Java의 Stack

import java.util.Stack;

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

메서드

메서드 설명
push(E item) 스택의 맨 뒤에 데이터 추가
pop() 스택의 맨 뒤 데이터 제거 후 반환
peek() 스택의 맨 뒤 데이터 확인 (제거X)

Stack 클래스의 문제

  1. 불필요하게 느림 (Thread-safe)
    1. 모든 연산이 안전하게 스레드용으로 처리
    2. 한 번에 한 스레드만 접근 가능하도록 락(lock)을 걸어서 동작하지만 대부분의 코드에서는 하나의 스레드만 사용하기 때문에 불필요
  2. 예전 방식의 오래된 클래스
  3. 다른 컬렉션들(List, Deque)과 호환/가독성 떨어짐

이러한 이유로 ArrayDeque를 사용한다.


ArrayDeque

ArrayDeque는 배열 기반의 이중 연결 큐로 LIFO(Stack) ,FIFO(Queue) 모두 사용가능하다

특징 설명
자료구조 배열 기반
크기 동적으로 증가
성능 add/remove/peek → O(1)
동기화 X (Thread not safe → 성능 좋음)
사용 가능 스택, 큐, 양쪽 끝 삽입/삭제

 

메서드

양뱡행 큐이기 때문에 스택 큐 모두 가능하다.

스택 전용 메서드

메서드 설명
push(E e) 스택의 top에 데이터 추가
pop() 스택의 top 데이터 제거 후 반환
peek() 스택의 top 데이터 확인 (제거 X)
isEmpty() 스택이 비어있는지 확인
Deque<Integer> stack = new ArrayDeque<>();

stack.push(10);  // 맨 앞에 추가
stack.push(20);

System.out.println(stack.peek()); // 20
System.out.println(stack.pop());  // 20 제거
System.out.println(stack.peek()); // 10

큐 전용 메서드

메서드 설명
addLast(E e) 큐의 뒤에 데이터 추가
removeFirst() 큐의 앞에서 데이터 제거 후 반환
peekFirst() 큐의 앞 데이터 확인
addFirst(E e) 큐의 앞에 데이터 추가 (양방향 큐용)
removeLast() 큐의 뒤 데이터 제거
peekLast() 큐의 뒤 데이터 확인

 

728x90
반응형

'Dev. > Java' 카테고리의 다른 글

[Java] getter/setter 왜 사용 지양해야할까?  (0) 2025.10.21
[Java] OCP(Open/Closed Principle)  (0) 2025.10.20
[Java] 캡슐화  (0) 2025.10.16
[Java] 인터페이스와 다형성  (0) 2025.10.15
[Java] 타입 변환 (Array ↔ Array/List/String)  (0) 2025.10.14