[Java] Stack(스택) 자료구조
2025. 10. 17. 18:34ㆍDev./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 클래스의 문제
- 불필요하게 느림 (Thread-safe)
- 모든 연산이 안전하게 스레드용으로 처리
- 한 번에 한 스레드만 접근 가능하도록 락(lock)을 걸어서 동작하지만 대부분의 코드에서는 하나의 스레드만 사용하기 때문에 불필요
- 예전 방식의 오래된 클래스
- 다른 컬렉션들(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 |