[델파이/Delphi] TQueue 사용 예제
델파이에서 큐(Queue)를 사용하려면 TQueue 클래스를 사용하면 된다.
TQueue 클래스는 System.Generics.Collections 유닛에 포함되어 있고,
제너릭(Generic)을 사용하여 설계되어 있으므로 다음과 같이 선언해서 사용하면 된다.
var
QueueS :TQueue<String>;
QueueI :TQueue<Integer>;
...
그리고 엠바카데로 공식 Wiki에 간단한 예제를 함께한 설명이 있어서 참고하였다.
엠바카데로 Wiki - Delphi(TQueue) : https://docwiki.embarcadero.com/CodeExamples/Sydney/en/Generics_Collections_TQueue_(Delphi)
Generics Collections TQueue (Delphi) - RAD Studio Code Examples
From RAD Studio Code Examples <!-- Saved in parser cache with key wikidb-cde_sydney_en_:pcache:idhash:11119-0!canonical and timestamp 20220119061035 and revision id 25706 -->
docwiki.embarcadero.com
<예제 코드>
procedure QueueTest;
var
Queue :TQueue<String>; //System.Generics.Collections
begin
try
Queue := TQueue<String>.Create; //Queue 생성
// Enqueue() : queue의 끝에 item을 추가한다.
Queue.Enqueue('John');
Queue.Enqueue('Mary');
Queue.Enqueue('Bob');
Queue.Enqueue('Anna');
Queue.Enqueue('Erica');
// Peek() : 가장 먼저 추가한 요소를 삭제없이 리턴한다.
Memo1.Lines.Add('첫번째 요소 : ' + Queue.Peek());
// Extract : 가장 먼저 추가한 요소를 삭제한다.
Queue.Extract;
// TrimExcess : Queue의 공간을 재조정(빈공간 해제)한다.
Queue.TrimExcess;
// Count : Queue의 개수를 리턴한다.
Memo1.Lines.Add('The queue now contains ' + IntToStr(Queue.Count) + ' elements.');
// Dequeue() : 가장 먼저 추가한 요소를 리턴 후 삭제한다.
Memo1.Lines.Add('First enqueued element was: "' + Queue.Dequeue() + '".');
Queue.Clear; //Clear the Queue
finally
Queue.Free; //Queue를 Destroy한다.
end;
end;
- Enqueue() : Queue에 요소를 추가(Add)한다.
- Dequeue() : Queue의 가장 먼저 추가된 요소를 리턴 후 삭제(Poll)한다.
- Extract : Queue의 가장 먼저 추가된 요소를 삭제만(Remove)한다.
- Peek() : Queue의 가장 먼저 추가된 요소를 리턴만한다.
- TrimExcess : Extract를 수행한 뒤 비어있는 공간을 메모리에서 해제 시켜준다.
<동작 화면>

Queue는 FIFO 구조이기 때문에, 나중에 입력한 값은 조작하기 어렵다는 특징이 있다.
그래서 Java 혹은 파이썬은 Queue를 앞,뒤로 pop하거나 add할 수 있는 [Deque] 구조를 지원한다.
하지만 델파이는 공식적으로 Deque를 지원하지 않으므로, 직접 구현해서 사용해야 한다.
그래서 다음에는 Deque를 구현한 오픈 소스를 찾아보려고 한다.
'Delphi' 카테고리의 다른 글
| [Delphi/델파이] ADOConnection 사용 시 exe(실행파일) 실행안되는 경우. (0) | 2022.09.17 |
|---|---|
| [델파이/Delphi] Directory 내용 불러오기, File 내용 추출하기 예제 (0) | 2022.02.17 |
| [델파이/Delphi] 시간 측정 - TStopWatch (0) | 2021.12.14 |
| [델파이/Delphi] TStringBuilder (0) | 2021.12.14 |
| [델파이/Delphi] Generic(제네릭) 간단 사용 예제 (0) | 2021.11.27 |