728x90
1. Queue 구현
1.1. Queue의 개념
Queue는 선입선출(FIFO, First In First Out) 방식의 자료구조입니다. 먼저 들어온 데이터가 먼저 나가는 구조입니다. 일상적인 예로는 줄 서기를 생각할 수 있습니다. 앞에 있는 사람이 먼저 나가는 구조입니다.
1.2. 구현 방법
Queue는 배열을 사용하여 구현할 수 있으며, front와 rear 포인터를 관리하면서 큐의 앞부분과 뒷부분을 추적합니다. 배열을 이용한 고정 크기 큐를 구현할 수 있습니다.
1.3. Queue의 기능
enqueue(value): Queue에 값을 추가.
dequeue(): Queue에서 값을 제거하고 반환.
peek(): Queue의 맨 앞 값을 확인(삭제하지 않음).
isEmpty(): Queue가 비었는지 확인.
isFull(): Queue가 꽉 찼는지 확인.
1.5. Queue의 장점과 단점
장점:
선입선출(FIFO) 구조 덕분에 작업 큐, 버퍼 관리, 이벤트 처리 시스템 등에서 유용하게 사용됨.
예를 들어 프린터 대기열, 네트워크 패킷 처리 등에 많이 사용됨.
단점:
고정 크기로 구현되면 크기 한계가 존재하고, 큐에서 데이터를 삭제하는 과정이 비효율적일 수 있음.
배열을 사용할 경우 큐의 데이터 삭제가 연속적으로 이루어지기 때문에 큐의 앞부분에서 공간이 남게 되어 메모리 낭비가 발생할 수 있음.
1.6 예제 코드
// Queue 클래스 구현 (배열 기반)
class Queue {
private int maxSize;
private int front;
private int rear;
private int[] queueArray;
// Queue 생성자
public Queue(int size) {
maxSize = size;
queueArray = new int[size];
front = 0;
rear = -1;
}
// Queue가 비어있는지 확인
public boolean isEmpty() {
return rear < front;
}
// Queue가 꽉 찼는지 확인
public boolean isFull() {
return rear == maxSize - 1;
}
// Queue에 데이터 삽입
public void enqueue(int value) {
if (isFull()) {
System.out.println("Queue is full. Cannot enqueue " + value);
} else {
queueArray[++rear] = value; // rear 값을 증가시키고 값을 삽입
System.out.println(value + " enqueued to queue");
}
}
// Queue에서 데이터 추출
public int dequeue() {
if (isEmpty()) {
System.out.println("Queue is empty. Cannot dequeue");
return -1;
} else {
return queueArray[front++]; // front 값을 반환하고 front를 증가시킴
}
}
// Queue의 맨 앞 값을 확인
public int peek() {
if (isEmpty()) {
System.out.println("Queue is empty. Cannot peek");
return -1;
} else {
return queueArray[front]; // 맨 앞 값을 반환
}
}
}
public class Main {
public static void main(String[] args) {
Queue queue = new Queue(5); // Queue 크기 5로 생성
queue.enqueue(10); // 10 삽입
queue.enqueue(20); // 20 삽입
queue.enqueue(30); // 30 삽입
queue.enqueue(40); // 40 삽입
System.out.println("Front element is: " + queue.peek()); // Queue의 front 확인
System.out.println(queue.dequeue() + " dequeued from queue"); // 10 추출
System.out.println(queue.dequeue() + " dequeued from queue"); // 20 추출
System.out.println("Front element is: " + queue.peek()); // Queue의 front 확인
}
}
시연 결과
'Java' 카테고리의 다른 글
[JAVA] Optional 클래스로 NullPointerException 방지하기 (0) | 2025.04.10 |
---|---|
[JAVA] Callable과 Future로 비동기 작업 이해하기 (0) | 2025.04.03 |
[Java] ScheduledExecutorService로 JVM 메모리 사용량 모니터링하기 (0) | 2025.04.02 |
[Java] Stack 구현 예제 (1) | 2025.03.31 |
[JAVA] HttpURLConnection을 활용한 HTTP 통신과 REST API 이해하기 (0) | 2025.03.27 |