# 큐(queue)
<div class="embed-responsive embed-responsive-16by9">
<iframe src="https://www.youtube.com/embed/qA0BSAWjPQs" frameborder="0" allowfullscreen></iframe>
</div>
## 목차
1. 큐는 뭘까?
2. 장점
3. 구조
4. 사용 예
5. 구현
- 명세
- 설계
- 구현
## 1. 큐는 뭘까?
큐(Queue)는 FIFO(First In First Out) 의 특징을 갖는 자료구조이다.
![Imgur](https://i.imgur.com/RdwTLiw.png)
## 2. 장점
큐는 입력 데이터들의 순서를 정하는데 최적화 되어있다.
가장 기본적으로 FIFO를 지원하지만, 특정 상태에 따라 우선순위를 결정하기도 한다. (= 우선순위 큐)
![Imgur](https://i.imgur.com/tu7ENuS.png)
## 3. 특징
데이터를 추가(enqueue) 하는 곳을 리어(rear), 해제(dequeue) 하는 곳은 프런트(front)라 한다.
## 4. 사용 예
입력 데이터의 출력순서를 정할 때 사용된다. 대표적 예로는 컴퓨터 운영체제(OS)의 스케쥴러가 있다.
![](https://i.imgur.com/yFEiuRf.png)
## 5. 구현
큐(queue)를 구현해보자.
### 5.1 명세서
큐의 명세는 아래와 같다.
+ 데이터를 추가(enqueue)하고 해제(dequeue)할 수 있다.
+ 가장 먼저 추가한 데이터가 가장 먼저 해제된다.
+ front 데이터를 확인 할 수 있다.
+ rear 데이터를 확인 할 수 있다.
+ 큐가 비어있는 경우 null값을 반환한다.
### 5.2 설계
명세서를 기반으로 클래스 다이어그램을 설계하자.
![Imgur](https://i.imgur.com/K95bwe8.png)
### 5.3 시뮬레이션
![Imgur](https://i.imgur.com/goUFGtn.png)
### 5.4 코드
구현 연습은 페이지 하단 실습문제를 통해 연습해보자.