[자료구조/알고리즘] Queue 이론 기초

leekoby·2023년 3월 14일
0
post-thumbnail

🔧변경내용🔨

제목날짜내용
발행일23.03.14

📌들어가기에 앞서

해당 포스터는 자료구조 학습 내용 중 Queue 기초이론에 대한 내용을 정리한 것입니다.


Queue의 정의

큐(Queue)는 줄을 서서 기다리다, 대기행렬이라는 뜻을 가지고 있다.

명절에는 고향으로 가기 위해 많은 자동차가 고속도로를 지나간다. 고속도로에는 톨게이트가 있고, 자동차는 톨게이트에 진입한 순서대로 통행료를 내고 톨게이트를 통과하게 된다.

이 때 톨게이트를 Queue 자료구조, 자동차는 데이터(data)로 비유할 수 있다.

  • 가장 먼저 진입한 자동차가 가장 먼저 톨게이트를 통과

  • 가장 나중에 진입한 자동차는 먼저 도착한 자동차가 모두 빠져나가기 전까지는 톨게이트를 빠져나갈 수 없다.




Queue의 구조

  • 자료구조 QueueStack과 반대되는 개념

  • 먼저 들어간 데이터(data)가 먼저 나오는 FIFO(First In First Out) 혹은 LILO(Last In Last Out)을 특징으로 가진다.

  • 입력의 방향과 출력의 방향이 각각 고정되어 있음.

    • 데이터를 입력할 시에는 큐의 끝에서(tail)

    • 데이터를 출력할 때는 큐의 맨 앞에서(head)

  • Queue에 데이터를 넣는 것을 'enqueue'

  • 데이터를 꺼내는 것을 'dequeue'

자료구조 Queue는 데이터(data)가 입력된 순서대로 처리할 때 주로 사용된다.




Queue의 특징


1. FIFO (First In First Out)

먼저 들어간 데이터가 제일 처음에 나오는 선입선출의 구조로 되어 있다.

1) 1, 2, 3, 4를 큐에 차례대로 넣는다.

						queue.enqueue(데이터)
출력 방향(head) 	<---------------------------< 입력 방향(tail)
					1 <- 2 <- 3 <- 4
				<---------------------------<
들어간 순서대로, 1번이 제일 먼저 들어가고 4번이 마지막으로 들어가게 된다.2) 큐가 빌 때까지 데이터를 전부 빼낸다.

						queue.dequeue(데이터)
출력 방향(head)	 <---------------------------< 입력 방향(tail)

				 <---------------------------<
1, 2, 3, 4
제일 첫 번째 있는 데이터부터 차례대로 나오게 된다.

2. 두 개의 입출력 방향을 가진다.

  • Queue 자료구조는 데이터의 입력, 출력 방향이 다르다.

  • 데이터를 입력할 때는 큐의 맨 끝(tail)으로만 입력이 가능

  • 데이터를 출력할 때는 큐의 맨 앞(head)으로만 출력이 가능

  • 즉, 큐는 데이터를 입력하는 곳과 출력하는 곳이 각각 정해져 있으며 이렇게 총 2개의 입출력 방향을 가지고 있다.

  • 만약 입출력 방향이 같다면 Queue 자료구조라고 볼 수 없다.


3. 데이터는 하나씩 넣고 뺄 수 있다.

  • Queue 자료구조는 데이터를 넣을 때는 큐의 맨 뒷 부분에서 뺄 때는 큐의 맨 앞부분에서 처리를 진행.

  • 각 처리 시마다 한 개의 데이터를 넣거나 뺄 수 있다.

  • 즉, 큐에 한 개 씩 여러 번 데이터를 넣어 큐 내부에 데이터가 여러 개 쌓여 있다고 하더라도, 데이터를 뺄 때는 큐의 맨 앞에서 한 번에 한 개의 데이터만을 뺄 수 있다.




Queue의 실사용 예제

자료구조 Queue는 컴퓨터에서도 광범위하게 활용된다.

컴퓨터와 연결된 프린터에서 여러 문서를 순서대로 인쇄하려면 어떻게 해야 할까?

  1. 문서를 작성하고 출력 버튼을 누르면 해당 문서는 인쇄 작업 (임시 기억 장치의) Queue에 들어간다.
  1. 프린터는 인쇄 작업 Queue에 들어온 문서를 들어온 순서대로 인쇄

컴퓨터(출력 버튼) - (임시 기억 장치의) Queue에 하나씩 들어옴 - Queue에 들어온 문서를 들어온 순서대로 인쇄

만약 Queue에 들어온 순서대로 출력하지 않는다면, 인쇄 결과물이 뒤죽박죽일 것이다.

위 예시처럼 컴퓨터 장치들 사이에서 데이터(data)를 주고받을 때, 각 장치 사이에 존재하는 속도의 차이시간 차이극복하기 위해 임시 기억 장치의 자료구조로 Queue를 사용한다.

이것을 통틀어 버퍼(buffer)라고 하며, 아래 이미지는 버퍼링(buffering)의 개념을 보여준다.

  • 대부분의 컴퓨터 장치에서 발생하는 이벤트는 파동 그래프와 같이 불규칙적으로 발생한다.
  • 이에 비해 CPU와 같이 발생한 이벤트를 처리하는 장치는 일정한 처리 속도를 갖는다.
  • 불규칙적으로 발생한 이벤트를 규칙적으로 처리하기 위해 버퍼(buffer)를 사용한다.

컴퓨터와 프린터 사이의 데이터(data) 통신을 정리하면 다음과 같다.

  • 일반적으로 프린터는 속도가 느리다.

  • CPU는 프린터와 비교하여, 데이터를 처리하는 속도가 빠르다.

  • 따라서, CPU는 빠른 속도로 인쇄에 필요한 데이터(data)를 만든 다음, 인쇄 작업 Queue에 저장하고 다른 작업을 수행합니다.

  • 프린터는 인쇄 작업 Queue에서 데이터(data)를 받아 들어온 순서대로 일정한 속도로 인쇄

유튜브와 같은 동영상 스트리밍 앱을 통해 동영상을 시청할 때, 다운로드 된 데이터(data)가 영상을 재생하기에 충분하지 않은 경우가 있다. 이때 동영상을 정상적으로 재생하기 위해 Queue에 모아 두었다가 동영상을 재생하기에 충분한 양의 데이터가 모였을 때 동영상을 재생한다.




📚 레퍼런스

코드스테이츠 수업자료

0개의 댓글