C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[147] [팁] VCL을 이용한 데이터의 관리 방법
박지훈.임프 [cbuilder] 8939 읽음    2001-07-30 16:35
이 팁은 담비님(천리안 FREKBS)님이 1999년 04월 10일에 천리안 프로그래머포럼에 올리신 것입니다.
담비님으로부터는 전제하여 올리는 데 대해 허락을 받았습니다.
좋은 정보를 공유하도록 허락해주신 담비님께 감사드립니다.
───────────────────────────────────────

안녕하세요! 담비입니다.

출처 : http://www.inprise.co.jp/tips/cbuilder/cb006/index.html

VCL을 이용한 데이터의 관리 방법을 설명한다.
VCL에는, 오브젝트의 리스트를 관리하는 클래스가 제공된다. C++ Builder의 다양한
데이타 관리의 수법 중, VCL 오브젝트를 사용해 데이타를 관리하는 이점은,
컴포넌트가 소유되는 테이타의 취급과의 공통성에 있다.

목차는 다음과 같다.

1. VCL 오브젝트
2. TList
3. 리스트 항목에 대한 조작
4. 리스트 항목의 소트
5. TStringList
6. TStrings

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1. VCL 오브젝트
C++ Builder에는 Rouge Wave Software의 표준 C++ 라이브러리가 제공된다.
이 컨테이너 클래스를 이용해 데이타의 괄리를 행할수 있으며 같은 목적을 위해
C++에서 취할 수 있는 수단은 몇개나 있다. C++ Builder가 채용한 VCL에는,
오브젝트의 리스트 관리를 위한 클래스가 제공된다. VCL 오브젝트를 사용한 데이타
관리의 수법은, 다른 수법에 비해 뛰어난 것은 없다. 세련된 컨테이너 클래스
라이브러리가 가져오는 이점을 C++ Builder를 사용하는 이유의 한가지로 생각해도
좋겠다. 그러나 컴포넌트에서 취급하는 데이타를 관리하기 위해서는 VCL 오브젝트를
이용할 필요가 있다고 말할 수 있다. 왜냐하면, 컴포넌트가 소유되는 데이타가
VCL 오브젝트이기 때문이다.

2. TList
TList는 TObject로부터 파생한 리스트 오브젝트이다. TList에는 임의의 오브젝트의
포인터를 저장할 수 있다. TList 오브젝트는, 다른 VCL 오브젝트처럼 new에 의해
할당해야만 한다. 다음의 코드는 TList 오브젝트를 작성하고, 2개의 리스트 항목
(문자열이다.)을 추가하는 처리이다.
   static TList *MyList = NULL;

   void __fastcall TForm1::FormCreate(TObject *Sender)
   {
       MyList = new TList;
       MyList->Add(strdup("C++Builder"));
       MyList->Add(strdup("Delphi"));
   }

TList 오브젝트는 그 사용이 끝나면 파기해야만 된다. 단, TList 오브젝트를
파기해도 리스트에 추가된 항목은 파기되지 않기 때문에 필요하다면, 다음과 같이
항목의 파기를 행하지 않으면 안된다.
   void __fastcall TForm1::FormDestroy(TObject *Sender)
   {
       for (int i = 0; i < MyList->Count; i++)
           delete MyList->Items[i];
       delete MyList;
   }

3. 리스트 항목에 대한 조작
이미 앞에서 기술한 예에서 사용하고 있지만, 리스트에 항목을 추가하려면,
Add 메소드를 이용한다. Add 메소드를 이용한다. Add 메소드는, 리스트의 마지막에
항목을 추가한다. 특정의 위치에 항목을 삽입하려면, Insert 메소드를 이용한다.
리스트의 항목에는, Items 프로퍼티를 사용해 엑세스할 수 있다. Items 프로퍼티는
배열 프로퍼티로서 배열의 요소수, 리스트에 추가된 항목의 수는 Count 프로퍼티로
조사할 수 있다. Items에 지정할 수 있는 배열 인덱스는, 0 ~ Count -1이 된다.
리스트의 항목을 삭제하려면 Delete 메소드를 이용한다. 리스트의 항목을
리스트내에서 이동시키기려면 Move 메소드를, 리스트 내의 다른 항목과 위치를
바꾸기 위해서는 Exchange 메소드를 이용한다. 다음의 예는 리스트에 추가된
최초의 항목과 다음 항목을 바꿔넣어 순서대로 표시한다.
   void __fastcall TForm1::Button1Click(TObject *Sender)
   {
       MyList->Exchange(0, 1);
       for (int i = 0; i < MyList->Count; i++)
           ShowMessage((char *)(MyList->Items[i]));
   }

4. 리스트 항목의 소트
TList는 리스트에 추가된 항목을 소트하는 기능이 제공된다. Sort메소드는, 지정한
비교 함수를 이용해 항목을 나란히 바꾼다. TList의 Sort 메소드를 이용하려면,
리스트에 추가한 항목을 비교하고, 대소 관례를 평가하는 함수가 있어야만 한다.
다음의 예는 리스트에 추가한 항목(문자열이다)을 내림차순으로 소트하는 코드이다.
   int __fastcall MyCompareFunc( void *Item1, void *Item2)
   {
       return -strcmp((char *)Item1, (char *)Item2);
   }

   void __fastcall TForm1::Button2Click(TObject *Sender)
   {
       MyList->Sort(MyCompareFunc);
   }

5. TStringList
AnsiString의 리스트를 작성하려면, TStringList를 이용한다. TList의 설명에서는
편의상 문자열 리스트를 작성했지만 실용적인 문자열 리스트는 TStringList이다.
TList는 문자열 이외의 오브젝트를 관리하거나, 독자적인 소트 기능을 이용한
문자열 리스트를 작성하고자 하는 경우에 이용한다.

TStringList는 AnsiString문자열을 저장할 수 있는 점을 제외하고는 Tlist와
사용법이 동일하다. 다음의 코드는 StringList를 작성하고 문자열을 추가하는
코드이다.
   static TStringList *MyStrList = NULL;

   void __fastcall TForm1::FormCreate(TObject *Sender)
   {
       MyStrList = new TStringList;
       MyStrList->Add("C++Builder");
       MyStrList->Add("Delphi");
   }

작성한 TStringList 오브젝트는, 사용이 완료되면 파기해야만 하지만 추가한
문자열이 자동적으로 파기된다. TStringList에 추가된 문자열에 엑세스 하려면,
Strings 프로퍼티를 이용한다.  Strings 프로퍼티는, TList의 Items 프로퍼티 같이
배열을 사용해 문자열 항목에 엑세스할 수 있다.

6. TStrigns
TStrings는 문자열 리스트 프로퍼티를 나타내기 위한 추상 클래스이다.
예로, Memo 컴포넌트의 Lines 프로퍼티는 복수행의 편집 텍스트의 각행에 엑세스하기
위한 TStrings 오브젝트이다.  또, ListBox 컴퍼넌트의 Items 프로퍼티는 ListBox에
표시되는 리스트 항목을 나타내는 TStrings 오브젝트이다. 이들 오브젝트는,
실제로는 TStirngs를 계승한 파생클래스에 의해 실현되고 있지만, TStrings의 모든
메소드나 프로퍼티를 이용할 수 있고, 공통된 조작이 가능하다. TStringList는
TStrings로부터 파생한 문자열 리스트 클래스에서 독립한 오브젝트로서 사용할 수
있다. TStringList를 이용하면, Memo의 내용을 일시적으로 이동시키거나, 문자열
리스트를 컴퍼넌트를 사용해 표시할 수 있다.
다음의 코드는, Memo에 입력된 내용을 행단위로 소트하는 예이다.
   void __fastcall TForm1::Button3Click(TObject *Sender)
   {
       TStringList *List = new TStringList;
       List->Assign(Memo1->Lines);
       List->Sort();
       Memo1->Lines->Assign(List);
       delete List;
   }

+ -

관련 글 리스트
147 [팁] VCL을 이용한 데이터의 관리 방법 박지훈.임프 8939 2001/07/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.