본문 바로가기
Delphi/클래스

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

by MonoSoft 2025. 11. 10.
728x90
반응형

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

728x90
반응형

댓글