큐(Queue)

KKH_94·2023년 9월 6일
0

Reactive_Programming

목록 보기
18/18

큐(Queue)는 컴퓨터 과학과 데이터 구조에서 사용되는 중요한 추상 자료 구조입니다.

큐는 데이터를 저장하는 컨테이너로, 일반적으로 "선입선출" (First-In-First-Out, FIFO) 원칙에 따라 데이터를 처리합니다. 즉, 가장 먼저 들어온 데이터가 가장 먼저 나가게 됩니다.

큐의 주요 특징과 작동 방식


FIFO 원칙 : 큐는 데이터를 저장할 때 가장 먼저 들어온 데이터가 가장 먼저 나갑니다. 이것은 대기열(대기 리스트)을 모델링하거나 작업을 순차적으로 처리할 때 유용합니다.

삽입과 삭제 : 큐는 주로 두 가지 주요 작업을 지원합니다.

Enqueue(삽입) : 큐의 끝 부분에 데이터를 추가하는 작업입니다. 이 작업은 큐에 새로운 항목을 추가합니다.

Dequeue(삭제) : 큐의 처음 부분에서 데이터를 제거하고 반환하는 작업입니다. 이 작업은 큐에서 가장 오래된 항목을 제거합니다.

스레드 안전성 : 멀티스레드 환경에서 여러 스레드가 큐에 접근하는 경우, 큐는 스레드 간의 동기화를 통해 안전하게 데이터를 처리할 수 있어야 합니다.


큐의 다양한 종류


일반 큐(Generic Queue) : 데이터의 일반적인 형태를 저장하는 큐입니다.

우선순위 큐(Priority Queue) : 각 항목에 우선순위를 부여하여 가장 높은 우선순위를 가진 항목이 먼저 나가게 하는 큐입니다.

환형 큐(Circular Queue) : 큐의 끝과 시작이 연결된 큐로, 일정한 크기를 가지고 데이터를 순환하도록 구성됩니다.

응용 분야 : 큐는 컴퓨터 과학 및 소프트웨어 개발에서 다양한 응용 분야에 사용됩니다.

예를 들어, 운영 체제에서 프로세스 스케줄링, 데이터 버퍼링, 대기열 관리, 그래프 알고리즘 등에 큐가 활용됩니다.

자료 구조 : 큐는 주로 배열(Array) 또는 연결 리스트(Linked List)를 기반으로 구현됩니다. 배열을 사용한 큐는 크기가 고정되어 크기를 동적으로 조절할 수 없지만 빠른 접근 속도를 제공합니다. 연결 리스트를 사용한 큐는 크기를 동적으로 조절할 수 있지만 접근 속도가 느릴 수 있습니다.

import java.util.LinkedList;

public class Queue<T> {
    private LinkedList<T> list = new LinkedList<T>();

    // 큐에 항목 추가
    public void enqueue(T item) {
        list.addLast(item);
    }

    // 큐에서 항목 제거 및 반환
    public T dequeue() {
        if (isEmpty()) {
            throw new IllegalStateException("Queue is empty");
        }
        return list.removeFirst();
    }

    // 큐가 비어 있는지 확인
    public boolean isEmpty() {
        return list.isEmpty();
    }

    // 큐의 크기 반환
    public int size() {
        return list.size();
    }
}

이것은 간단한 제네릭 큐의 구현 예제이며, 일반적인 큐의 기본 동작을 보여줍니다.

큐는 프로그래밍에서 다양한 상황에서 데이터를 효율적으로 관리하기 위해 사용되며, 데이터를 순서대로 처리하고 보관하는 데 유용한 자료 구조입니다.

profile
_serendipity

0개의 댓글