단순 변수와 배열은 굳이 이야기 할 필요가 없지만 레코드 부터의 자료 관리 방법을 살펴 보면
TMyRecord = record
No: integer; // 책번호
Name: string; // 책의 제목
end;
PMyREcord = ^TMyRecord;
로 자료가 들어갈 형태를 선언해주고, 실제 자료가 들어 갈 수 있는 변수를 만들어 자료를 보관 한다.
Myrecord : ^TMyRecord;
또는
MyRecord: PMyRecord;
방법을 사용하여 자료를 보관한다.
자료의 안으로의 접근은
MyRecord.No; MyRecord.Name; 또는 PMyRecord^.No, PMyRecord^.Name 형식으로 한다.
예를 들어 실제 값을 넣어보자
procedure TForm2.btRecordAddClick(Sender: TObject);
var
iMyRecord: ^TMyRecord; // iMyRecord: PMyRecord
begin
New(iMyRecord);
iMyRecord.No:= Random(65000);
iMyRecord.Name:= Edit1.Text;
MyList.Add(iMyRecord);
end;
위에서 iMyRecord 는 New() 에 의하여 저장 할 메모리를 확보하고 dispose(iMyRecord)에 의하여 메모리를 돌려 준다.
여러개의 자료를 관리하기 쉽게 샇기 위해서는 샇는 선반 같은 곳이 필요하다. 배열을 이용하여 샇아 둘 수도 있겠지만,
델파이는 TList 라는 클래스가 준비 되어 있다. //TList<T>하고는 다르다.
MyList : TList
MyList:= TList.create;
하여 MyList 라는 만들어져 있는 보관 장소를 이용하면 된다.
TList 에는 Add, Clear, Delete, IndexOf, Move, Sort, Count 등의 멤버가 이미 만들어져 있으니 상속 받아 사용하면 된다.
주의 할 점은 TList는 Clear 하더라도 그곳에 보관 된 New(iMyRecord)로 만들어져 있는 자료의 메모리 영역은 시스템에 반환이 안된다.
자동 반환이 되게 하기 위히여 TObjectList 가 준비 되어 있다.(차후 설명)
아래와 같이 미리 준비하고 필요하면 없애 줄때 각각의 메모리 공간을 시스템에 돌려 준다.
procedure TForm2.FormCreate(Sender: TObject);
begin
MyList:= TList.Create;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
for var idx in MyList do //2020년 수정
dispose(idx);
FreeAndNil(MyList); //MyList.free
참고로 소팅을 이용하기 위하여는 익명메소드를 사용하여아래와 같이한다.
procedure TForm2.btRecordSortClick(Sender: TObject);
begin
MyList.SortList(functon(Item1, Item2: Pointer): integer //2020년 수정
begin
Result:= CompareText(PMyRecord(Item1).Name, PMyRecord(Item2).Name,)
end
);
end;
이상 레코드를 이용한 자료 저장 방법을 살펴보았다. 다음은 Object를 레코드 처럼 사용하여 보자.
댓글 없음:
댓글 쓰기