TIL (62) | 2023.10.24 | 큐(Queue)

kjg5370·2023년 10월 24일
0

TIL

목록 보기
61/91
post-thumbnail

오늘 배운 것

  • 큐(Queue)
    데이터 구조 중 하나로, 데이터를 선입선출(First-In-First-Out, FIFO) 순서로 저장하고 관리하는 자료 구조.
    실생활에서 대기열과 유사한 동작을 수행합니다. 가장 먼저 도착한 항목이 가장 먼저 처리되는 원리.

  • 주요 특징

    • 선입선출(FIFO): 큐에 데이터를 추가할 때, 가장 먼저 추가한 항목이 가장 먼저 처리.
      큐의 맨 앞에서부터 항목이 제거.

    • 두 가지 주요 연산: 큐는 주로 두 가지 주요 연산을 지원.
      Enqueue: 큐에 데이터를 추가하는 작업입니다. 이 작업은 큐의 끝(뒤)에 데이터를 추가.
      Dequeue: 큐에서 데이터를 제거하고 반환하는 작업입니다. 이 작업은 큐의 맨 앞에서 데이터를 제거.

    • Peek: 큐에서 데이터를 제거하지 않고 맨 앞의 데이터를 확인하는 연산.
      큐의 맨 앞에 있는 데이터를 반환하지만 큐에서는 삭제하지 않음.

    • 사용 사례: 큐는 대기열 모델링, 작업 관리, 이벤트 처리 및 데이터 버퍼링과 같은 다양한 응용 프로그램에서 사용.

  • 예제

     using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class QueueExample : MonoBehaviour
    {
        // 큐를 선언.
        Queue<string> myQueue = new Queue<string>();
    
        void Start()
        {
            // 큐에 아이템을 추가합니다.
            myQueue.Enqueue("아이템 1");
            myQueue.Enqueue("아이템 2");
            myQueue.Enqueue("아이템 3");
    
            // 큐에서 아이템을 제거하면서 출력합니다.
            while (myQueue.Count > 0)
            {
                string item = myQueue.Dequeue();
                Debug.Log("Dequeued: " + item);
            }
        }
    }

기억 할 것

  • 주의할 점

    • 비어 있는 큐에 접근하지 않기
      큐에서 데이터를 가져오기 전에 큐가 비어있는지 확인.
      큐가 비어 있는 상태에서 Dequeue를 호출하면 오류가 발생하므로 보통 myQueue.Count 속성을 사용하여 큐의 요소 수를 확인하는 것이 좋음.

    • 스레드 안전성
      멀티스레드 환경에서 큐를 사용하는 경우, 큐가 스레드 안전하도록 관리해야 함.
      여러 스레드가 큐에 동시에 액세스하면 데이터 무결성 문제가 발생할 수 있으므로 스레드 동기화 기술을 사용하여 큐를 안전하게 관리해야 함.

    • 메모리 누수 방지
      큐에 데이터를 추가한 후 꼭 처리해야 함.
      큐에 데이터를 계속 쌓아두면 메모리 누수가 발생할 수 있으므로 큐를 사용한 후에는 필요한 경우 데이터를 제거하고 정리.

    • 적절한 데이터 유형 사용
      큐에 저장되는 데이터 유형을 신중하게 선택.
      예를 들어, 특정 데이터 유형을 큐에 저장할 때 형 변환 문제에 유의해야 함.

    • 컬렉션의 복사와 참조
      큐를 다른 큐에 복사하거나 전달할 때, 실제 데이터가 복사되는 것이 아니라 참조만 전달.
      필요한 경우 데이터를 복사하여 의도치 않은 데이터 변경을 방지.

내일 할 일

  • enemy상태머신 만들어보기
profile
학생입니다

0개의 댓글