TList와 TList<T>의 차이 및 실무 활용

델파이에서 리스트 구조를 사용할 때 가장 기본이 되는 것이 TList와 **TList<T>**입니다.
둘 다 배열 기반 리스트지만, 용도와 안전성, 사용 편의성에서 큰 차이가 있습니다.
TList
제네릭 ❌ 없음 (Pointer 기반)
타입 안정성 낮음
캐스팅 필요 ✅ 항상 필요
델파이 버전 D7 포함 모든 버전
실수 가능성 높음
TList<T>
제네릭 ✅ 있음
타입 안정성 높음
캐스팅 필요 ❌ 불필요
델파이 버전 XE 이상
실수 가능성 낮음 — 컴파일러가 타입 체크
uses
System.Generics.Collections, System.SysUtils;
procedure UseGenericList;
var
Numbers: TList<Integer>;
I: Integer;
begin
Numbers := TList<Integer>.Create;
try
Numbers.Add(10);
Numbers.Add(20);
Numbers.Add(30);
for I in Numbers do
Writeln('값: ', I);
finally
Numbers.Free;
end;
end;
begin
UseGenericList;
end.
Delphi 7 / XE 호환 (TList 기반)
uses
Classes, SysUtils;
procedure UseLegacyList;
var
List: TList;
Value: PInteger;
I: Integer;
begin
List := TList.Create;
try
New(Value);
Value^ := 10;
List.Add(Value);
New(Value);
Value^ := 20;
List.Add(Value);
for I := 0 to List.Count - 1 do
Writeln('값: ', PInteger(List[I])^);
// 메모리 해제 필수
for I := 0 to List.Count - 1 do
begin
Dispose(PInteger(List[I]));
end;
finally
List.Free;
end;
end;
begin
UseLegacyList;
end.
XE 이상 환경에서는 가능한 항상 TList<T> 사용 권장.
TObject를 저장할 경우, **TObjectList<T>**로 전환하면
자동 메모리 관리 가능.
D7 프로젝트 유지보수 시 TList 사용 시 Dispose 누락이
메모리 누수의 핵심 원인.
리스트 초기 용량을 지정하면 (Capacity) 빈번한
재할당을 방지해 성능 개선 가능.

#Delphi #TList #TListT #제네릭 #메모리관리 #자료구조 #LegacyCode
'Delphi > 클래스' 카테고리의 다른 글
| 커스텀 열거자(Custom Enumerator) 구현을 통한 For-In 루프 최적화 (0) | 2026.03.04 |
|---|---|
| TStringList 정렬, 중복 제거, 파일 입출력 (0) | 2025.11.11 |
| 클래스(Class) 기반 객체 설계 기초 (0) | 2025.10.17 |
| 메모리 스트림(TMemoryStream) 활용하기 (0) | 2025.10.01 |
| TMonitor를 이용한 객체 동기화 (Advanced) (0) | 2025.09.05 |
댓글