search results for 'TStrings'

  1. 2010/01/13 델파이의 클래스 헬퍼 (4)

델파이의 최근 버전에 추가되었지만 개발자들이 잘 모르고 있는 기능들이 꽤 많은데요. 숙련된 델파이 개발자들까지도 델파이 7 이하까지의 문법에만 익숙한 경향이 있습니다. 하지만 구버전 문법으로 구버전처럼 사용한다면 최신 버전을 사용하는 장점이 반감되지 않겠습니까. 그래서, 델파이 개발자들이 잘 모르고 있는 아주 유용한 기능들을 시간이 되는 대로 하나씩 소개해볼까 합니다.

이번에 소개하는 클래스 헬퍼는 델파이 2006에서 추가된 언어 기능으로, 기존의 클래스를 수정하지도 상속하지도 않고 클래스의 기능을 확장할 수 있게 해줍니다. 클래스를 많이 다루는 경력 개발자분들은 이 말만 듣고도 우와~ 할 것 같습니다. 이런 필요가 있는 경우가 꽤 흔하거든요.

클래스 헬퍼 자체도 하나의 클래스입니다. 클래스 헬퍼 클래스(말이 좀 헷갈리네요)에서 선언한 멤버들은 마치 원래의 클래스의 멤버인 것처럼 액세스할 수 있게 됩니다.

실제로도 아주 유용한 아래의 샘플 코드를 살펴봅시다. (delphi.about.com에서 소개된 코드입니다)

interface

uses Classes;

type
  TStringsHelper = class helper for TStrings
  public
    function Add(const V: Variant): Integer; overload;
    function Add(const Args: array of Variant): Integer; overload;
  end;

implementation

uses Variants;

function TStringsHelper.Add(const Args: array of variant): Integer;
var
  tmp: string;
  cnt: Integer;
begin
  tmp := '';
  for cnt := Low(Args) to High(Args) do
    tmp := tmp + VarToStr(Args[cnt]) ;
  result := Add(tmp) ;
end;

function TStringsHelper.Add(const V: Variant): Integer;
begin
  Result := Add([V]) ;
end;

end.

이 클래스 헬퍼를 이용하면, 이제 TStrings (그리고 TStringList 등 상속받은 모든 클래스들)에서 TStrings에 원래 존재하는 기본 Add() 함수 외에 오버로드된 Variant 및 Variant 배열 버전의 Add() 함수들을 호출할 수 있게 됩니다. Variant가 되니까 당연히 정수나 실수 등 대부분의 델파이 기본 타입들을 직접 TStrings 객체의 문자열 아이템으로 추가할 수 있게 됩니다.

with ListBox1.Items do
begin
  Add('delphi.about.com') ;
  Add(2008) ;
  Add(true) ;
  Add(['Only ', 1, true, ' line']) ;
end;

이와 같이, 클래스 헬퍼를 이용하면 기존의 클래스에 기능을 추가할 수 있습니다. 하지만 자신이 직접 만드는 클래스에 클래스 헬퍼를 사용할 필요는 거의 없을 거고, 주로 위의 TStrings처럼 개발자가 수정하기 곤란한 프레임워크/라이브러리의 클래스들에 기능을 추가해서 사용할 때 많이 활용할 수 있습니다.

클래스 헬퍼로 기존 클래스의 private이나 protected 멤버를 액세스할 수는 없고 오직 public/published 멤버만 액세스할 수 있습니다. 따라서 클래스 헬퍼를 쓴다고 해서 기존에 할 수 없었던 작업을 할 수 있게 되는 것은 아닙니다. 하지만 위의 예제에서 보듯이, 단순 코딩 작업을 많이 줄여주고 코드를 더 간략하게 만들 수 있게 됩니다.

2010/01/13 10:39 2010/01/13 10:39

trackback :: http://blog.devgear.co.kr/imp/trackback/128