본문 바로가기
엑셈 기업문화/엑셈 사람들

[이누리]아직은 어려운 TStringList

by EXEM 2008. 12. 19.


회사에 입사한 2개월이 조금 넘는 동안 이런 저런 소스분석 할 때 마다 나오는 것이 있었다.

그것은 바로 TList와 TStringList!!

매우 자주 사용되고 있었다.
하지만 나에게는 너무 어렵고 복잡하기만 했다 그래서 사용하지 않아볼까 생각도 했지만
워낙 많이 사용되어 피해 갈 수 없었다.
이 두가지 중 TStringList에 대해서 적어보려한다.

TStringList와 TList의 차이는 스트링 자체를 갖는 것과 포인터를 넘기는 차이가 있다.

TStringList는 델파이 유닛중 Classes라는 유닛에 기본적으로 포함되어 있는 클래스다.

TStringList = class(TStrings)

위와 같이 TStrings를 상속 받고 있다. TStrings와 TStringList는 다르다.

{ 상속관계 }
TList -> TStrings -> TStringList

이 클래스는 문자열을 효율적으로 관리하기 위한 클래스다.
알아두면 여러모로 사용할 곳이 많은 함수이다.

TStringList는  다른 클래스와 다름없이 변수를 선언하고 Create를 하고 사용한다.
Create를 한 후에는 Free가 반드시 따른다.

Var
MyList: TStringList;
begin
MyList:= TStringList.Create;
…….

MyList.Free;

 다음은 TStringList를 이용한 예제이다.

우선 TStringList를 생성하고 리스트에 String을 Animals, Flowers, Cars를 추가해 보자.

procedure TForm1.FormCreate(Sender:TObject);
var
  MyList: TStringList;
  Index: Integer;

begin
  MyList := TStringList.Create;
  try
  MyList.Add('Animals');
  MyList.Add('Flowers');
  MyList.Add('Cars');
ListBox1.items.AddStrings(MyList);
finally
    MyList.Free;
  end;
end;

ListBox에 Animals, Flowers, Car순으로 정렬되어 나올 것이다.


여기에서 정렬을 하고 싶다면 MyList.Sort를 추가해 주면 된다.
TStringList에는 Sort함수가 있다.
이 Sort 함수는 string을 내림차순으로 정렬한다.
오름차순은 기본 Sort함수로는 안될거 같고 CustomSort라는 메소드를 이용 할 수도 있다.
함수를 호출하면 compare함수를 넘겨준다.

TStringListSortCompare는 Classes 유닛에 선언 되어있으므로 TStringListSortCompare 모양의 함수를 하나 선언하고 함수 내부에서 index1과 index2의 string을 가져와서 비교할 때 string을 integer로 변환해서 비교해야 한다.

그리고 결과를 Result로 return해주면 된다.

댓글