키워드를 저장하는 클래스

[목차(도우미)]
트리뷰(TreeView)를 이용하여 SQL 검색의 조건을 구성하고자 한다.
델파이 라이브러리의 TStringList는 한가지의 문자열을 저장하므로 키워드(Keyword)와 상세(Detail)를 저장하기 어렵다. 그래서 키워드와 상세를 저장하는 비표시 컴포넌트(non-visual Component)를 작성하게 된다.

흔히 사용되는 경우는
  Key :string;
  Detail:string;
의 구조체(Structure, Record)를 정의하여 배열을 사용하는 것이다.

클래스(Class)를 사용하는 경우라면 두개의 필드(Field, member variable)를 클래스로 정의하여 클래스를 컬렉션(Collection) 정의 하는 것이다. 컬렉션을 사용하는 것은 리스트(TList)를 사용하는 것이 간편하다.

(집주위의 이름모를 꽃: 평소에 무심코 지나가는 꽃도 확대하여 자세히 보면 아주 아름다움이 감추어져 있다.)

여기서는 기존의 스트링리스트(TStringList)를 계승하여 클래스를 확장하여 범용성을 부여하는 것으로 구현한다.
CKeywordList = class(TStringList)
  private
    FDetail:TStringList;
    function GetDetail(Index:integer) : string;
    procedure SetDetail(Index: integer; const S:string);

  public
    constructor Create;override;
    destructor Destroy;override;

    procedure Update(const Key:string; const Detail:string);
    function Add(S:string);override;

    property Details[Index:integer]:string read GetDetail write SetDetail;
  end;

  보통의 스트링리스트처럼 취급하되 상세부분(Detail)은 Update 메소드를 이용하여 저장한다. 그리고 상세부분을 읽어들일 때는 스트링리스트의 사용법과 유사한 속성을 제공한다.
예)
FList.Strings[K] --- Key의 접근
FList.Details[K] --- Detail의 접근

이것은 해시테이블(Hash table)과도 유사한 개념으로 볼수 있는데 Key정보가 많지 않으므로 해시테이블을 쓰지 않았다. 해시테이블에 관하여는 차후 검토하기로 한다.

관련된 내 블로그:

[연구와 개발] - [연구] 필터 조건을 선택하는 컴포넌트

by 금메달.아빠 on 2010. 5. 20. 01:04