개발/JAVA
Java 자료구조: 스택(Stack)과 큐(Queue) 배우기!
예니03
2025. 1. 9. 11:31
반응형
여러분, 접시를 쌓아 올리는 걸 상상해본 적 있나요? 또는 줄을 서서 차례대로 물건을 받는 모습을 떠올려본 적 있나요? Java에는 이렇게 데이터를 저장하고 꺼내는 순서를 관리할 수 있는 자료구조가 있습니다. 바로 스택(Stack)과 큐(Queue)입니다. 오늘은 이 두 가지를 간단한 예제와 함께 배워보아요! 😊
1. 스택(Stack) - 접시를 쌓고 꺼내는 구조
스택은 접시를 쌓는 것과 같은 구조입니다.
- 데이터 입력: 접시를 쌓듯 데이터를 쌓습니다.
- 데이터 출력: 가장 위에 있는 데이터를 먼저 꺼냅니다.
- LIFO(Last In, First Out): 마지막에 들어간 데이터가 가장 먼저 나옵니다.
1-1. 스택 사용법: 예제
import java.util.Stack;
public class StackEx {
public static void main(String[] args) {
// 스택 선언
Stack<Integer> stack = new Stack<>();
// 1. 데이터 입력 (push)
for (int i = 0; i < 5; i++) {
stack.push(i); // 데이터를 스택에 넣음
System.out.println("Stack: " + stack);
}
// 2. 가장 위에 있는 데이터 확인 (peek)
System.out.println("Peek: " + stack.peek()); // 출력: 4
System.out.println("Stack: " + stack);
// 3. 데이터 꺼내기 (pop)
System.out.println("Pop: " + stack.pop()); // 출력: 4
System.out.println("Stack: " + stack);
// 4. 스택이 비어있을 때까지 데이터 꺼내기
while (!stack.empty()) { // 스택이 비어있지 않으면 반복
System.out.println("Pop: " + stack.pop());
System.out.println("Stack: " + stack);
}
}
}
실행 결과
Stack: [0]
Stack: [0, 1]
Stack: [0, 1, 2]
Stack: [0, 1, 2, 3]
Stack: [0, 1, 2, 3, 4]
Peek: 4
Stack: [0, 1, 2, 3, 4]
Pop: 4
Stack: [0, 1, 2, 3]
Pop: 3
Stack: [0, 1, 2]
Pop: 2
Stack: [0, 1]
Pop: 1
Stack: [0]
Pop: 0
Stack: []
1-2. 스택 동작 원리
- Push: 데이터를 쌓습니다.
- 예: stack.push(1) → 스택에 1을 추가.
- Peek: 가장 위에 있는 데이터를 확인합니다.
- 예: stack.peek() → 마지막 데이터(4)를 확인.
- Pop: 가장 위에 있는 데이터를 꺼내며 삭제합니다.
- 예: stack.pop() → 4를 꺼내고 스택에서 삭제.
- Empty 확인: stack.empty()로 스택이 비어있는지 확인.
2. 큐(Queue) - 줄을 서는 구조
큐는 줄을 서서 물건을 받는 것과 같은 구조입니다.
- 데이터 입력: 줄 맨 뒤에 데이터를 추가합니다.
- 데이터 출력: 줄 맨 앞의 데이터를 꺼냅니다.
- FIFO(First In, First Out): 먼저 들어간 데이터가 먼저 나옵니다.
2-1. 큐 사용법: 예제
import java.util.LinkedList;
import java.util.Queue;
public class QueueEx {
public static void main(String[] args) {
// 큐 선언
Queue<Integer> queue = new LinkedList<>();
// 1. 데이터 입력 (offer)
for (int i = 0; i < 5; i++) {
queue.offer(i); // 데이터를 큐에 넣음
System.out.println("Queue: " + queue);
}
// 2. 가장 앞에 있는 데이터 확인 (peek)
System.out.println("Peek: " + queue.peek()); // 출력: 0
// 3. 데이터 꺼내기 (poll)
System.out.println("Poll: " + queue.poll()); // 출력: 0
System.out.println("Queue: " + queue);
// 4. 큐가 비어있을 때까지 데이터 꺼내기
while (!queue.isEmpty()) { // 큐가 비어있지 않으면 반복
System.out.println("Poll: " + queue.poll());
System.out.println("Queue: " + queue);
}
}
}
실행 결과
Queue: [0]
Queue: [0, 1]
Queue: [0, 1, 2]
Queue: [0, 1, 2, 3]
Queue: [0, 1, 2, 3, 4]
Peek: 0
Poll: 0
Queue: [1, 2, 3, 4]
Poll: 1
Queue: [2, 3, 4]
Poll: 2
Queue: [3, 4]
Poll: 3
Queue: [4]
Poll: 4
Queue: []
2-2. 큐 동작 원리
- Offer: 데이터를 줄 맨 뒤에 추가합니다.
- 예: queue.offer(1) → 큐에 1 추가.
- Peek: 줄 맨 앞에 있는 데이터를 확인합니다.
- 예: queue.peek() → 0 확인.
- Poll: 줄 맨 앞에 있는 데이터를 꺼내며 삭제합니다.
- 예: queue.poll() → 0 꺼내고 큐에서 삭제.
- Empty 확인: queue.isEmpty()로 큐가 비어있는지 확인.
3. 스택 vs. 큐: 차이점
특징 | 스택(Stack) | 큐(Queue) |
동작 원리 | LIFO (Last In, First Out) | FIFO (First In, First Out) |
데이터 입력 | push (맨 위에 추가) | offer (맨 뒤에 추가) |
데이터 출력 | pop (맨 위에서 제거) | poll (맨 앞에서 제거) |
데이터 확인 | peek (맨 위 확인) | peek (맨 앞 확인) |
4. 정리
- 스택(Stack): 접시를 쌓듯 데이터를 관리하며, 마지막 데이터가 먼저 나옵니다.
- 큐(Queue): 줄을 서듯 데이터를 관리하며, 첫 번째 데이터가 먼저 나옵니다.
- 공통점: 둘 다 데이터를 저장하고 꺼내는 구조를 효율적으로 관리합니다.

반응형