## 과제 : 제네릭 큐 구현
목표 : 제네릭을 사용하여 다양한 데이터 타입을 저장할 수 있는 큐를 구현한다.
요구사항 : 다음 코드를 참고하여, 제네릭을 사용하여 다양한 데이터 타입을 저장할 수 있는 큐를 구현한다.
```java
public class MyQueue {
private int[] array;
private int size;
private int front;
private int rear;
public MyQueue() {
array = new int[10];
size = 0;
front = 0;
rear = 0;
}
public void add(int value) {
if (size >= array.length) {
int[] newArray = new int[array.length * 2];
System.arraycopy(array, 0, newArray, 0, array.length);
array = newArray;
}
array[rear] = value;
rear = (rear + 1) % array.length;
size++;
}
public int poll() {
int value = array[front];
front = (front + 1) % array.length;
size--;
return value;
}
public int peek() {
return array[front];
}
public int size() {
return size;
}
}
```
---
## 과제 : 제네릭 큐 구현 모범답안
```java
public class MyDeque<T> {
private T[] array;
private int size;
private int front;
private int rear;
public MyDeque() {
array = (T[]) new Object[10];
size = 0;
front = 0;
rear = 0;
}
public void addFirst(T value) {
if (size >= array.length) {
T[] newArray = (T[]) new Object[array.length * 2];
System.arraycopy(array, 0, newArray, 0, array.length);
array = newArray;
}
front = (front - 1 + array.length) % array.length;
array[front] = value;
size++;
}
public void addLast(T value) {
if (size >= array.length) {
T[] newArray = (T[]) new Object[array.length * 2];
System.arraycopy(array, 0, newArray, 0, array.length);
array = newArray;
}
array[rear] = value;
rear = (rear + 1) % array.length;
size++;
}
public T pollFirst() {
T value = array[front];
front = (front + 1) % array.length;
size--;
return value;
}
public T pollLast() {
rear = (rear - 1 + array.length) % array.length;
T value = array[rear];
size--;
return value;
}
public T peekFirst() {
return array[front];
}
public T peekLast() {
return array[(rear - 1 + array.length) % array.length];
}
public int size() {
return size;
}
}
```