1. Stack 🌐
스택(Stack)은 LIFO (Last In, First Out) 구조로, 마지막에 추가된 데이터가 가장 먼저 제거됩니다. 흔히 접시 쌓기에 비유할 수 있습니다.
주요 메서드
- push(E item): 스택의 맨 위에 데이터를 추가합니다.
- pop(): 스택의 맨 위에 있는 데이터를 제거하고 반환합니다.
- peek(): 스택의 맨 위 데이터를 제거하지 않고 반환합니다.
- isEmpty(): 스택이 비어 있는지 확인합니다.
예제 코드
import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
// 데이터 추가
stack.push(1);
stack.push(2);
stack.push(3);
// 데이터 확인
System.out.println("Top Element: " + stack.peek()); // 3
// 데이터 제거
System.out.println("Popped: " + stack.pop()); // 3
// 스택 상태 확인
System.out.println("Is Stack Empty? " + stack.isEmpty()); // false
}
}
2. Queue 🚗
큐(Queue)는 FIFO (First In, First Out) 구조로, 먼저 추가된 데이터가 가장 먼저 제거됩니다. 흔히 줄서기 상황을 떠올릴 수 있습니다.
주요 인터페이스: Queue
- add(E e): 큐의 맨 뒤에 데이터를 추가합니다. (예외 발생 가능)
- offer(E e): 큐의 맨 뒤에 데이터를 추가합니다. (성공 여부 반환)
- poll(): 큐의 맨 앞 데이터를 제거하고 반환합니다. (비어있을 경우 null 반환)
- peek(): 큐의 맨 앞 데이터를 제거하지 않고 반환합니다.
예제 코드
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<>();
// 데이터 추가
queue.offer("A");
queue.offer("B");
queue.offer("C");
// 데이터 확인
System.out.println("Front Element: " + queue.peek()); // A
// 데이터 제거
System.out.println("Removed: " + queue.poll()); // A
// 큐 상태 확인
System.out.println("Queue Size: " + queue.size()); // 2
}
}
3. Deque 🔄
Deque(Double-Ended Queue)는 양쪽 끝에서 데이터를 추가하거나 제거할 수 있는 자료구조입니다. 스택과 큐의 동작을 모두 수행할 수 있습니다.
주요 인터페이스: Deque
- addFirst(E e) / offerFirst(E e): 덱의 맨 앞에 데이터를 추가합니다.
- addLast(E e) / offerLast(E e): 덱의 맨 뒤에 데이터를 추가합니다.
- pollFirst() / removeFirst(): 덱의 맨 앞 데이터를 제거하고 반환합니다.
- pollLast() / removeLast(): 덱의 맨 뒤 데이터를 제거하고 반환합니다.
- peekFirst() / peekLast(): 덱의 맨 앞/뒤 데이터를 제거하지 않고 반환합니다.
예제 코드
import java.util.ArrayDeque;
import java.util.Deque;
public class DequeExample {
public static void main(String[] args) {
Deque<Integer> deque = new ArrayDeque<>();
// 데이터 추가
deque.offerFirst(1); // 앞에 추가
deque.offerLast(2); // 뒤에 추가
deque.offerFirst(0); // 앞에 추가
// 데이터 확인
System.out.println("Front Element: " + deque.peekFirst()); // 0
System.out.println("Rear Element: " + deque.peekLast()); // 2
// 데이터 제거
System.out.println("Removed from Front: " + deque.pollFirst()); // 0
System.out.println("Removed from Rear: " + deque.pollLast()); // 2
// 덱 상태 확인
System.out.println("Deque Size: " + deque.size()); // 1
}
}
차이점 한눈에 보기 🌍
자료구조 | 특징 | 주요 메서드 |
Stack | LIFO (마지막에 추가된 데이터가 먼저 제거됨) | push, pop, peek |
Queue | FIFO (먼저 추가된 데이터가 먼저 제거됨) | offer, poll, peek |
Deque | 양쪽 끝에서 데이터 추가/제거 가능 | offerFirst, pollLast, peekFirst |
'IT 개발 라이프 > Back_End' 카테고리의 다른 글
JRE, JDK, JVM: 자바의 핵심 구성 요소 🚀 (0) | 2024.12.18 |
---|---|
자바의 가비지 컬렉터 (Garbage Collector) 🗑️ (0) | 2024.12.18 |
자바 ReflectionUtils: 리플렉션을 쉽게 활용하는 방법 🛠️ (0) | 2024.12.16 |
추상 클래스와 인터페이스 (0) | 2024.12.11 |
객체지향 설계의 5원칙 (SOLID) (0) | 2024.12.11 |