※여러 참고 자료들의 내용을 토대로 다시 재정리 및 인용한 내용과 기록을 담고 있습니다. ※가급적 모든 내용을 게임 개발 기술과 관련지어 설명하고 있습니다. ※ 자료의출처는 문단 최하단에 표기되어 있으며, 관련된 정보를 찾으시거나 공부하시는 분들에게 도움이 되셨으면 좋겠습니다.
스택과 큐 (Stack, Queue)
Stack 은 나중에 들어온데이터가 먼저 나가는 후입선출 (LIFO) 방식 (Push/Pop)
Queue 는 먼저 들어간 데이터가 먼저 나가는 선입선출 (FIFO) 방식 (Enqueue/Dequeue)
두 자료구조 모두 데이터를 순서대로 입출력하기 때문에 순차적으로 처리하기에 용이함 (중간 요소 삽입/삭제 불가)
(후입선출 구조 / 위키피디아 이미지)
(선입선출 구조 / 위키피디아 이미지)
선언 및 사용 방법
public class StackQueueExample
{
Stack<int> cardNumberStack = new Stack<int>();
public void Execute()
{
cardNumberStack.Push(1);
cardNumberStack.Push(-30);
cardNumberStack.Push(10);
cardNumberStack.Push(3);
Console.Write(cardNumberStack.Peek()); // 가장 먼저 나오게될 요소 반환
int popCount = cardNumberStack.Count;
for(int i = 0; i < popCount; i++)
{
Console.Write(cardNumberStack.Pop());
}
}
// 최종 출력 결과
// 3
// 3
// 10
// -30
// 1
}
public class StackQueueExample
{
Queue<string> alertContextQueue = new Queue<string>();
public void Execute()
{
alertContextQueue.Enqueue("경고 문구1");
alertContextQueue.Enqueue("경고 문구2");
alertContextQueue.Enqueue("경고 문구3");
alertContextQueue.Enqueue("경고 문구4");
Console.Write(alertContextQueue.Peek()); // 가장 먼저 나오게될 요소 반환
int dequeueCount = alertContextQueue.Count;
for(int i = 0; i < dequeueCount; i++)
{
Console.Write(alertContextQueue.Dequeue());
}
}
// 최종 출력 결과
// 경고 문구1
// 경고 문구1
// 경고 문구2
// 경고 문구3
// 경고 문구4
}
마무리
Stack과 Queue는 인덱스를 통한 접근을 제공하지 않으며, 특정 원소에 접근하는 것이 불가능 (오직 순차적 접근에 따라 처리 가능)
두 자료구조 모두 데이터의 추가와 제거가 자주 발생하고, 순차 처리해도 문제가 없다면 사용하기에 적합 (성능이 List에 비해 상대적으로 좋음)
되돌리기/뒤로가기와 같은 기능을 구현한다면 Stack이 적합
여러 이벤트/도전과제/대기열 관리와 같이 차례대로 처리가 필요한 기능을 구현한다면 Queue가 적합