스택
스택(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://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 |