ÀúÀ۱ǿ¡ ´ëÇÑ °øÁö
ÀÌ ¹®¼­¿¡ Æ÷ÇÔµÈ ¸ðµç ±Û°ú ¼Ò½º ÄÚµå´Â ÀÛÀÚÀÎ Àú ±è¼ºµ¿ÀÇ ÁöÀû Àç»êÀÌÁö¸¸ ¹«´ÜÀ¸·Î ¹èÆ÷Çϰųª Ã¥À̳ª °­ÀÇ ±³ÀçµîÀ» À§ÇÑ º¹Á¦ µî ÀúÀÛ±ÇÀ» ÀúÇØÇÏ´Â ÇàÀ§¸¦ Á¦¿ÜÇϰí´Â ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
¶ÇÇÑ ÀÌ ÆäÀÌÁö¿¡ ´ëÇÑ ¸µÅ©´Â ÀÚÀ¯·Ó°Ô ÇÒ ¼ö ÀÖÀ¸³ª Àü¹®À» ÀüÁ¦ÇÏ´Â ÀÏÀº Çã¿ëÇÏÁö ¾Ê½À´Ï´Ù.


1.3. ÇÁ·ÎÆÛƼ

1.3.1. °³¿ä
¾îÇø®ÄÉÀÌ¼Ç °³¹ßÀÚÀÇ ÀÔÀå¿¡¼­ µ¶ÀÚµéÀº ÇÁ·ÎÆÛƼ¶ó´Â °ÍÀÌ ¹«¾ùÀÎÁö ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. µ¨ÆÄÀÌ¿¡¼­ Æû¿¡ ÄÞÆ÷³ÍÆ®¸¦ Çϳª ¿Ã·Á ³õ°í ¿ÀºêÁ§Æ® ÀνºÆåÅ͸¦ º¸¸é ÄÞÆ÷³ÍÆ®ÀÇ »ö»ó, ±Û²Ã, ±â´É µîÀ» ¼³Á¤ÇÒ ¼ö ÀÖµµ·Ï µÇ¾î ÀÖ´Ù. ¾îÇø®ÄÉÀÌ¼Ç °³¹ßÀÚµéÀÌ Æû µðÀÚÀÌ³Ê¿Í ¿ÀºêÁ§Æ® ÀνºÆåÅ͸¦ ÀÌ¿ëÇØ¼­ ÄÞÆ÷³ÍÆ®ÀÇ ¼Ó¼ºµéÀ» ¼³Á¤ÇÏ¸é ±× Çǵå¹éÀ» ¹Ù·Î ¹Ù·Î È®ÀÎÇØ°¡¸é¼­ ¾îÇø®ÄÉÀ̼ÇÀ» ¼³°èÇÒ ¼ö ÀÖ´Ù. µ¨ÆÄÀÌ¿¡¼­ Á¦°øÇÏ´Â TeeChart ÄÞÆ÷³ÍÆ® µîÀ» º¸¸é ¼Ó¼ºÀÌ ³Ê¹« ¸¹¾Æ¼­ ¸Ó¸®°¡ ¾ÆÇà Á¤µµ´Ù. ±×·¸´Ù¸é ÄÞÆ÷³ÍÆ® °³¹ßÀÚ¿¡°Ô ÇÁ·ÎÆÛƼ´Â ¾î¶² Àǹ̰¡ ÀÖÀ»±î?
ÇÁ·ÎÆÛƼ´Â µ¥ÀÌÅÍ Çʵå¿Í »ç¿ëÀÚ »çÀ̸¦ ¿¬°áÇØ ÁÖ´Â Á¢±Ù Åë·Î¶ó°í ÇÒ ¼ö ÀÖ´Ù. »ç¿ëÀÚ°¡ ÇÁ·ÎÆÛƼ¸¦ Á¶ÀÛÇÑ´Ù´Â °ÍÀº ½ÇÁ¦·Î µ¥ÀÌÅÍ ÇʵåÀÇ °ªÀ» º¯°æÇϰųª ÂüÁ¶ÇÏ´Â °æ¿ì°¡ ´ëºÎºÐÀÌ´Ù. ´Ù¸¸ ±×°ÍÀ» Á÷Á¢ Á¶ÀÛÇÏÁö ¾Ê°í ÇÁ·ÎÆÛƼ¶ó´Â Åë·Î¸¦ ÅëÇØ¼­ ÇÑ ´Ü°è °ÅÃļ­ Á¶ÀÛÇÒ »ÓÀÌ´Ù. ÇÁ·ÎÆÛƼ´Â ¸¶Ä¡ Ŭ·¡½ºÀÇ µ¥ÀÌÅÍ Çʵåó·³ »ç¿ëÇÏÁö¸¸ µ¥ÀÌÅÍ Çʵå¿Í ´Þ¸® ½ÇÇà ½Ã´Â ¹°·ÐÀÌ°í ¼³°è ½Ã¿¡µµ »ç¿ëÇÒ ¼ö Àֱ⠶§¹®¿¡ ¾îÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇÏÁö ¾Ê°í¼­µµ ÄÞÆ÷³ÍÆ®ÀÇ ¿©·¯ °¡Áö ±â´ÉÀ» ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ µ¥ÀÌÅÍ Çʵåó·³ ´Ü¼øÈ÷ °ªÀ» ´ëÀÔÇÏ´Â °Í »Ó¸¸ ¾Æ´Ï¶ó °ªÀ» Àаųª ¾µ ¶§ ƯÁ¤ ¸Þ¼Òµå¸¦ »ç¿ëÇÒ ¼ö Àֱ⠶§¹®¿¡ ÀÌ ¸Þ¼Òµå³»¿¡¼­ µ¥ÀÌÅÍ Çʵ尡 °¡Áú ¼ö ÀÖ´Â °ªÀÇ ¹üÀ§¸¦ °Ë»çÇÒ ¼öµµ ÀÖ°í ³»ºÎ µ¥ÀÌÅ͸¦ ¾ÏÈ£È­ÇØ ³õ°í »ç¿ëÀÚ¿¡°Ô´Â °£´ÜÇÏ°Ô º¸¿© ÁÙ ¼öµµ ÀÖ°í º¯°æµÈ µ¥ÀÌÅÍ ÇʵåÀÇ °ª¿¡ µû¶ó ÄÞÆ÷³ÍÆ®ÀÇ ¸ð¾çÀ» Áï½Ã º¯°æÇØ ÁشٵçÁö ÇÏ´Â ´Ù¾çÇÏ°í º¹ÀâÇÑ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Ù.

¸®½ºÆ® 1.7 TVehicle Ŭ·¡½º
type
  TVehicle = class(TComponent)
  private
    FWidth : integer;
    FHeight : integer;
    FLength : integer;

    procedure SetWidth(const Value : integer);
    function  GetHeight : integer;
    procedure SetHeight(const Value : integer);

    function  GetVolume : integer;
  public
    constructor Create(AOwner : TComponent); override;

    property Width : integer read FWidth write SetWidth default 1700;
    property Height : integer read GetHeight write SetHeight default 4500;
    property Length : integer read FLength write FLength default 1800;
    property Volume : integer read GetVolume;
  end;

TCar = class(TVehicle)
private
    FVolume : integer;
function  GetVolume : integer;
procedure SetVolume(const Value : integer);
  published
    property Width : integer ;
    property Height : integer nodefault;
    property Length : integer;
    property Volume : integer read GetVolume write SetVolume;
  end;

...

implementation

...

constructor TVehicle.Create(AOwner : TComponent);
begin
  inherited Create(AOwner);
  FWidth := 1700;
  FHeight := 4500;
  FLength := 1800;
end;

function TVehicle.GetHeight: integer;
begin
  Result := FHeight;
end;

function TVehicle.GetVolume: integer;
begin
  Result := FWidth * FHeight * FLength;
end;

procedure TVehicle.SetHeight(const Value: integer);
begin
  if FHeight <> Value then
  begin
    FHeight := Value;
    Update;
  end;
end;

procedure TVehicle.SetWidth(const Value: integer);
begin
  if FWidth <> Value then
  begin
    if FWidth < 3000 then
    begin
      FWidth := Value;
      Update;
    end;
  end;
end;

function TCar.GetVolume: integer;
begin
  Result := inherited Volume;
Result := Result + 1;
end;

procedure TCar.SetVolume(const Value: integer);
begin
inherited Volumen := Value;
end;


ÇÁ·ÎÆÛƼ¸¦ ¼±¾ðÇϱâ À§Çؼ­´Â property¶ó´Â Ű¿öµå¿Í ÇÁ·ÎÆÛƼ À̸§, ÇÁ·ÎÆÛƼÀÇ ÀÚ·á Çü, ±×¸®°í ÇÁ·ÎÆÛƼ¸¦ ÀÐ°í ¾µ ¶§ »ç¿ëÇÒ ¸Þ¼Òµå¸¦ ÁöÁ¤ÇØ ÁØ´Ù. ¿¹Á¦ÀÇ Volume ÇÁ·ÎÆÛƼó·³ ¾²±â ¸Þ¼Òµå¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ÇÁ·ÎÆÛƼ´Â Àбâ Àü¿ëÀÌ µÈ´Ù. ¸¶Âù°¡Áö·Î ÇÁ·ÎÆÛƼ¸¦ Àд ¹æ¹ýÀ» Á¤ÀÇÇØ ÁÖÁö ¾ÊÀ¸¸é ¾²±â Àü¿ë ÇÁ·ÎÆÛƼ°¡ µÇ´Âµ¥ ¾²±â Àü¿ë ÇÁ·ÎÆÛƼ´Â °ÅÀÇ »ç¿ëÇÏÁö ¾Ê´Â´Ù. ÇÁ·ÎÆÛƼ¸¦ Ŭ·¡½ºÀÇ Published ¿µ¿ª¿¡ ¼±¾ðÇÏ¸é ¿ÀºêÁ§Æ® ÀνºÆåÅÍ¿¡ ³ªÅ¸³ª¸ç Æû ÆÄÀÏ(*.dfm)·Î ÀúÀåµµ µÈ´Ù. Àбâ Àü¿ë ÇÁ·ÎÆÛƼ´Â Published ¿µ¿ª¿¡ ¼±¾ðµÇ¾îµµ ¿ÀºêÁ§Æ® ÀνºÆåÅÍ¿¡ ³ªÅ¸³ªÁö ¾ÊÀ¸¸ç ÇÁ·ÎÆÛƼ¸¦ Public ¿µ¿ª¿¡ ¼±¾ðÇÏ¸é ±× ÇÁ·ÎÆÛƼ´Â ½ÇÇà ½Ã¿¡¸¸ ÀÐ°í ¾µ ¼ö ÀÖ°Ô µÈ´Ù.
¿¹Á¦ Äڵ忡¼­ Width ÇÁ·ÎÆÛƼ´Â Á÷Á¢ µ¥ÀÌÅÍ Çʵå FWidth·ÎºÎÅÍ °ªÀ» ÀÐ¾î ¿À°í ¾µ ¶§´Â SetWidth ¸Þ¼Òµå¸¦ ÀÌ¿ëÇϵµ·Ï ¼±¾ðµÇ¾ú´Ù. ÇÁ·ÎÆÛƼÀÇ ½ÇÁ¦ °ªÀ» ÀúÀåÇÒ µ¥ÀÌÅÍ Çʵå´Â º¸Åë Priavte ¿µ¿ª¿¡ ¼±¾ðÇÑ´Ù. ±×¸®°í µ¥ÀÌÅÍ ÇʵåÀÇ À̸§Àº ¿¹Á¦ Äڵ忡¼­ Width ÇÁ·ÎÆÛƼÀÇ °ªÀ» ÀúÀåÇÒ º¯¼ö·Î FWidth¸¦ ¼±¾ðÇÑ °Íó·³ º¸Åë ¾ËÆÄºª F¸¦ Á¢µÎ¾î·Î ºÙ¿©¼­ Á¤ÀÇÇÑ´Ù. ´ç¿¬ÇÑ ¾ê±âÁö¸¸ ÀϹÝÀûÀ¸·Î ÇÁ·ÎÆÛƼÀÇ ½ÇÁ¦ °ªÀ» ÀúÀåÇÒ µ¥ÀÌÅÍ Çʵå´Â Private ¿µ¿ª¿¡ ¼±¾ðÇϱ⠶§¹®¿¡ ÆÄ»ý Ŭ·¡½ºµéÀº Á÷Á¢ ÀÌ µ¥ÀÌÅÍ Çʵ带 Á¶ÀÛÇÒ ¼ö ¾ø°í ºÎ¸ð Ŭ·¡½º¿¡¼­ »ó¼Ó¹ÞÀº ÇÁ·ÎÆÛƼ¸¦ ÀÌ¿ëÇØ¾ß ÇÑ´Ù. Volume ÇÁ·ÎÆÛƼó·³ ÇÁ·ÎÆÛƼ°¡ ¹Ýµå½Ã ´ëÀÀÇÏ´Â µ¥ÀÌÅÍ Çʵ带 °¡Áú ÇÊ¿ä´Â ¾ø´Ù.
1.3.2. ÇÁ·ÎÆÛƼ ÀÐ°í ¾²±â
ÇÁ·ÎÆÛƼ¸¦ ÀÐ°í ¾²´Â ¹æ¹ýÀ» Á¤ÀÇÇÒ ¶§ read Áö½ÃÀÚ¿Í write Áö½ÃÀÚ¸¦ »ç¿ëÇÑ´Ù. ÀÐÀ» ¶§´Â read Áö½ÃÀÚ¸¦ »ç¿ëÇÏ°í ¾µ ¶§´Â write Áö½ÃÀÚ¸¦ »ç¿ëÇÑ´Ù. ÇÁ·ÎÆÛƼ¸¦ ÀÐ°í ¾²´Â °¡Àå °£´ÜÇÑ ¹æ¹ýÀº Á÷Á¢ µ¥ÀÌÅÍ Çʵ带 Á¶ÀÛÇÏ´Â °ÍÀÌ´Ù. ÀÌ ¹æ¹ýÀº µ¥ÀÌÅÍ Çʵ带 Á¶ÀÛÇÒ ¶§ Ưº°ÇÑ Ã³¸®°¡ ÇÊ¿ä ¾ø´Â °æ¿ì¿¡ »ç¿ëÇÑ´Ù. ¿¹Á¦¿¡¼­ Width ÇÁ·ÎÆÛƼ³ª Length ÇÁ·ÎÆÛƼÀÇ °æ¿ì Á÷Á¢ µ¥ÀÌÅÍ Çʵ带 Á¶ÀÛÇϰí ÀÖ´Ù.
¸¸¾à Àб⠸޼ҵ带 »ç¿ëÇÏ·Á ÇÑ´Ù¸é GetHeight, GetVolumeó·³ ÇÔ¼ö·Î ¸¸µé¾î¾ß ÇÏ¸ç ±âº»ÀûÀ¸·Î ÀÎÀÚ¸¦ °¡Áú ¼ö ¾ø´Ù. ±×¸®°í ÇÔ¼öÀÇ ¹Ýȯ °ªÀº ÇÁ·ÎÆÛƼÀÇ µ¥ÀÌÅÍ Çü°ú °°¾Æ¾ß ÇÑ´Ù. ¾²±â ¸Þ¼Òµå´Â SetWidth, SetHeightó·³ ÇÁ·Î½ÃÀú·Î ¼±¾ðÇØ¾ß Çϸç ÇÁ·ÎÆÛƼÀÇ µ¥ÀÌÅÍ Çü°ú °°Àº ÇüÀÇ ÀÎÀÚ¸¦ Çϳª °¡Áöµµ·Ï ÇØ¾ß ÇÑ´Ù. Àб⠸޼ҵåÀÇ À̸§Àº °ü½ÀÀûÀ¸·Î ÇÁ·ÎÆÛƼ À̸§ ¾Õ¿¡ GetÀ» ºÙÀÌ°í ¾²±â ¸Þ¼Òµå´Â SetÀ» ºÙÀδÙ.
1.3.3. ÇÁ·ÎÆÛƼ Á¾·ù
Published ¿µ¿ª¿¡ ¼±¾ðÇÑ ÇÁ·ÎÆÛƼµéÀº ¼³°è ½Ã¿¡ ¿ÀºêÁ§Æ® ÀνºÆåÅÍ¿¡ ³ªÅ¸³ª´Âµ¥ ÇÁ·ÎÆÛƼÀÇ Á¾·ù¿¡ µû¶ó ¿ÀºêÁ§Æ® ÀνºÆåÅͰ¡ Ãë±ÞÇÏ´Â ¹æ¹ýÀÌ ´Ù¸£´Ù. °³¹ßÀÚ°¡ ¿ÀºêÁ§Æ® ÀνºÆåÅÍ¿¡¼­ ÇÁ·ÎÆÛƼ¸¦ Á¶ÀÛÇÒ ¶§ ÇÁ·ÎÆÛƼ ¿¡µðÅͰ¡ µ¿ÀÛÇÏ°Ô µÇ´Âµ¥ µ¨ÆÄÀÌ´Â ±âº»ÀûÀ¸·Î ´ëºÎºÐÀÇ µ¥ÀÌÅÍ Çü¿¡ ´ëÇØ ÇÁ·ÎÆÛƼ ¿¡µðÅ͸¦ °¡Áö°í ÀÖ´Ù. ¸¹Àº ÇÁ·ÎÆÛƼ ¿¡µðÅ͵éÀ» ³× °¡Áö Á¤µµ·Î ±¸ºÐÇØ º¼ ¼ö Àִµ¥ ±× Á¾·ù´Â ¾Æ·¡ Ç¥ 6.1°ú °°´Ù

Ç¥ 1-1 ÇÁ·ÎÆÛƼ Á¾·ù
ÇÁ·ÎÆÛƼ Á¾·ùÇÁ·ÎÆÛƼ ¿¡µðÅÍ
±âº»Çü¼ýÀÚ, ¹®ÀÚ, ¹®ÀÚ¿­µîÀÇ ´Ü¼øÇÑ µ¥ÀÌÅÍ ÇüÀ» Á¶ÀÛÇÒ ¼ö ÀÖÀ¸¸ç ¿ÀºêÁ§Æ® ÀνºÆåÅÍÀÇ ÆíÁý â¿¡¼­ Á÷Á¢ Á¶ÀÛÇÑ´Ù.
¿­°ÅÇü¹®ÀÚ¿­À» ÀÔ·ÂÇÏ´Â °Íó·³ Á÷Á¢ ÆíÁý â¿¡¼­ ÀÔ·ÂÇϰųª µå·Ó ´Ù¿î ÄÞº¸ ¹Ú½º¿¡¼­ °ªÀ» ¼±ÅÃÇÒ ¼ö ÀÖÀ¸¸ç ÆíÁý â¿¡¼­ ´õºí Ŭ¸¯ÇÏ¸é ¼øÈ¯Çϸ鼭 ´ÙÀ½ °ªµéÀ» º¸¿© ÁØ´Ù.
ÁýÇÕÇüÇÁ·ÎÆÛƼ¸¦ ´õºí Ŭ¸¯Çϰųª ÇÁ·ÎÆÛƼ À̸§ ¿ÞÂÊ¿¡ ÀÖ´Â + Ç¥½Ã¸¦ ´©¸£¸é ¼³Á¤ °¡´ÉÇÑ Ç÷¡±×µéÀÌ ¾Æ·¡·Î ³ªÅ¸³ª¸ç °¢ Ç÷¡±×´Â BooleanÇüÀ¸·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.
°´Ã¼ÇüÇÁ·ÎÆÛƼ¸¦ ´õºí Ŭ¸¯Çϰųª ÇÁ·ÎÆÛƼ À̸§ ¿ÞÂÊ¿¡ ÀÖ´Â + Ç¥½Ã¸¦ ´©¸£¸é °´Ã¼ÀÇ Published ÇÁ·ÎÆÛƼ ¸®½ºÆ®°¡ ³ªÅ¸³ª¸ç ÀÌ °ªµéÀº ´Ù¸¥ ÇÁ·ÎÆÛƼ Á¾·ù¿Í °°ÀÌ ¼³Á¤ÇÏ¸ç º°µµÀÇ ÇÁ·ÎÆÛƼ ¿¡µðÅ͸¦ Á¦°øÇÒ ¼öµµ ÀÖ´Ù.
¹è¿­Çü¹è¿­ÇüÀº ±âº»ÀûÀ¸·Î Á¦°øÇÏ´Â ÇÁ·ÎÆÛƼ ¿¡µðÅͰ¡ ¾ø°í Published·Î »ç¿ëÇÏ·Á¸é ¹Ýµå½Ã ÄÞÆ÷³ÍÆ® °³¹ßÀÚ°¡ º°µµ·Î ÇÁ·ÎÆÛƼ ¿¡µðÅ͸¦ ¸¸µé¾î µî·ÏÇØ ÁÖ¾î¾ß ÇÑ´Ù.




±×¸² 1-4 ±âº»Çü ÇÁ·ÎÆÛƼ ¿¡µðÅÍ




±×¸² 1-5 ¿­°ÅÇü ÇÁ·ÎÆÛƼ ¿¡µðÅÍ




±×¸² 1-6 ÁýÇÕÇü ÇÁ·ÎÆÛƼ ¿¡µðÅÍ




±×¸² 1-7 °´Ã¼Çü ÇÁ·ÎÆÛƼ ¿¡µðÅÍ


ºñ·Ï ´ëºÎºÐÀÇ µ¥ÀÌÅÍ ÇüÀÌ Publised ¿µ¿ª¿¡ ¼±¾ðµÉ ¼ö ÀÖÁö¸¸ ¸ðµç µ¥ÀÌÅÍ ÇüÀÌ Published ÇÁ·ÎÆÛƼ°¡ µÉ ¼ö ÀÖ´Â °Ç ¾Æ´Ï´Ù. ´ëÇ¥ÀûÀ¸·Î ¹è¿­ÇüÀ̳ª ·¹ÄÚµåÇüÀº Published ¿µ¿ª¿¡ ¼±¾ðµÉ ¼ö ¾ø´Ù. Ç¥ 6.2´Â Published ¿µ¿ª¿¡ ¼±¾ðµÉ ¼ö ÀÖ´Â ÇÁ·ÎÆÛƼ ÇüÀ» ³ªÅ¸³½´Ù. ±×·¯¸é Ç¥6.2¿¡ ¾ø´Â ÇÁ·ÎÆÛƼ ÇüÀ» Published ¿µ¿ª¿¡ ¼±¾ðÇÏ·Á¸é ¾î¶»°Ô ÇØ¾ß ÇÒ±î? TRect ·¹Äڵ带 Published ¿µ¿ª¿¡ ¼±¾ðÇÏ·Á¸é ¾î¶»°Ô ÇØ¾ß ÇÒ±î? TRectÇü ÇÁ·ÎÆÛƼ¸¦ Published ¿µ¿ª¿¡ ¼±¾ðÇÑ´Ù°í ÇØ¼­ ÄÄÆÄÀÏ·¯°¡ ¿¡·¯¸¦ ¹ß»ý½ÃŰÁö´Â ¾Ê´Â´Ù. ÇÏÁö¸¸ ÆûÀ» ¼³°èÇÒ ¶§ Æû¿¡ ÄÞÆ÷³ÍÆ®¸¦ ¿Ã·Á ³õÀ¸¸é ¾Æ¸¶µµ µ¨ÆÄÀ̰¡ ¹«»çÇÏÁö ¸øÇÒ°Å´Ù. ¿Ö³ÄÇÏ¸é ¿ÀºêÁ§Æ® ÀνºÆåÅÍ´Â RTTI(Run Time Type Information)¸¦ ÀÌ¿ëÇØ¼­ ÇØ´ç ÄÞÆ÷³ÍÆ®ÀÇ Published ¿µ¿ª¿¡ ¼±¾ðµÈ ÇÁ·ÎÆÛƼ ¸®½ºÆ®¸¦ ¾Ë¾Æ³»°í À̵éÀ» Â÷·Ê´ë·Î ¿ÀºêÁ§Æ® ÀνºÆåÅÍ¿¡ Ç¥½ÃÇÏ°Ô µÇ´Âµ¥ ¼ø¼­´ë·Î Ç¥½ÃÇÏ´Ù°¡ TRect Çü ÇÁ·ÎÆÛƼ¸¦ ¸¸³ª¼­ TRect ·¹ÄÚµåÇü¿¡ ´ëÇÑ ÇÁ·ÎÆÛƼ ¿¡µðÅ͸¦ ã¾Æ º¸Áö¸¸ µî·ÏµÈ ÇÁ·ÎÆÛƼ ¿¡µðÅͰ¡ ¾ø±â ¶§¹®¿¡ Access ViolationÀ» ¹ß»ý½ÃŰ°Ô µÈ´Ù. ÀÌ ¹®Á¦¿¡ ´ëÇÑ ÇØ°áÃ¥Àº ÄÞÆ÷³ÍÆ® °³¹ßÀÚ°¡ º°µµÀÇ ÇÁ·ÎÆÛƼ ¿¡µðÅ͸¦ ¸¸µé¾î ÁÖ´ø°¡ ¾Æ´Ï¸é ·¹Äڵ带 Ŭ·¡½º·Î ¸¸µé¾î ÁÖ¸é µÈ´Ù. ÇÁ·ÎÆÛƼ ¿¡µðÅ͸¦ ¸¸µå´Â ¹æ¹ýÀº ³ªÁß¿¡ ÀÚ¼¼ÇÏ°Ô ´Ù·ç±â·Î ÇϰڴÙ.

Ç¥ 1-2 Published ¿µ¿ª¿¡ ¼±¾ðµÉ ¼ö ÀÖ´Â ÇÁ·ÎÆÛƼ Çü
ÇÁ·ÎÆÛƼ µ¥ÀÌÅÍ Çü¿¹
¼­¼öÇüInteger, Char, ¿­°ÅÇü
½Ç¼öÇüSingle, Double, Extended, Comp, Currency
¹®ÀÚ¿­String, ShortString
ÁýÇÕTAnchors, TBorderIcons, TDBGridOptions
Ŭ·¡½ºTSizeConstraints, TFont
¸Þ¼Òµå Æ÷ÀÎÅÍTNotifyEvent, TCloseEvent, TCloseQueryEvent


1.3.4. ÇÁ·ÎÆÛƼ ÃʱⰪ
ÄÞÆ÷³ÍÆ®¸¦ Æû À§¿¡ ¿Ã·Á ³õ°í ¿ÀºêÁ§Æ® ÀνºÆåÅ͸¦ º¸¸é ´ëºÎºÐÀÇ ÇÁ·ÎÆÛƼ¿¡´Â ÀÌ¹Ì °ªÀÌ ¼³Á¤µÇ¾î ÀÖ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù. ¾îÇø®ÄÉÀÌ¼Ç °³¹ßÀÚ´Â ÇÊ¿äÇÑ ÇÁ·ÎÆÛƼ¿¡ ´ëÇØ¼­¸¸ ¼³Á¤ÇÏ°í ³ª¸ÓÁö´Â ÃʱⰪÀ» ±×³É »ç¿ëÇÏ¸é Æí¸®Çϱ⠶§¹®¿¡ ÄÞÆ÷³ÍÆ® °³¹ßÀÚ´Â °¡´ÉÇÏ¸é ¸ðµç ÇÁ·ÎÆÛƼ¿¡ ´ëÇØ ÃʱⰪÀ» ¼³Á¤ÇØ ÁÖ´Â °ÍÀÌ ÁÁ´Ù. ÇÁ·ÎÆÛƼÀÇ ÃʱⰪÀ» ¼³Á¤ÇØ ÁÖ±â À§Çؼ­´Â À§ÀÇ ¿¹Á¦ ÄÚµåó·³ ÇÁ·ÎÆÛƼ¸¦ ¼±¾ðÇÒ ¶§ write Àý°ú ¼¼¹ÌÄÝ·Ð »çÀÌ¿¡ default Áö½ÃÀÚ¿Í ÃʱⰪÀ» ½á ÁÖ¸é µÈ´Ù. ÇÁ·ÎÆÛƼÀÇ ÃʱⰪÀº ¶ÇÇÑ ÇÁ·ÎÆÛƼ¸¦ Æû ÆÄÀÏ¿¡ ÀúÀåÇÒ°ÍÀÎÁö¸¦ °áÁ¤ÇÏ´Â ±âº»ÀûÀÎ ¿ªÇÒÀ» ÇÑ´Ù. Æû µðÀÚÀ̳ʴ ÇÁ·ÎÆÛƼÀÇ ÇöÀç ¼³Á¤ °ª°ú ÃʱⰪÀÌ °°À¸¸é Æû ÆÄÀÏ¿¡ ÇÁ·ÎÆÛƼ¸¦ ÀúÀåÇÏÁö ¾Ê´Â´Ù. ±×·¸Áö ¾Ê°í ÃʱⰪÀ» ¼³Á¤ÇØ ÁÖÁö ¾Ê¾Ò°Å³ª °ªÀÌ ´Ù¸£¸é ¹«Á¶°Ç ÀúÀåÇÑ´Ù.

ÇÁ·ÎÆÛƼ¸¦ ¼±¾ðÇÒ ¶§ ÃʱⰪÀ» ÁöÁ¤ÇØ Áشٰí ÇØ¼­ ´ëÀÀÇÏ´Â µ¥ÀÌÅÍ ÇʵåÀÇ °ªÀÌ ±× ÃʱⰪÀ¸·Î ¼³Á¤µÇ´Â °Ç ¾Æ´Ï´Ù. ´ÜÁö ¿ÀºêÁ§Æ® ÀνºÆåÅÍ¿¡¼­ÀÇ ÃʱⰪÀ» ÁöÁ¤ÇÏ´Â °Í »ÓÀ̱⠶§¹®¿¡ TVehicle ¿¹Á¦ ó·³ ¹Ýµå½Ã Ŭ·¡½ºÀÇ »ý¼ºÀÚ¿¡¼­ µ¥ÀÌÅÍ Çʵ带 ÃʱⰪÀ¸·Î ¼³Á¤ÇØ ÁÖ¾î¾ß ÇÑ´Ù.


1.3.5. ÇÁ·ÎÆÛƼ »ó¼Ó(Property Inheritance)
ºÎ¸ð Ŭ·¡½º¿¡¼­ Public ¿µ¿ªÀ̳ª Protected ¿µ¿ª¿¡ ¼±¾ðÇÑ ÇÁ·ÎÆÛƼ¸¦ ÀÚ¼Õ Å¬·¡½º¿¡¼­ ¿ÀºêÁ§Æ® ÀνºÆåÅÍ¿¡ ³ªÅ¸³ªµµ·Ï ÇÏ·Á¸é ÀÚ¼Õ Å¬·¡½ºÀÇ Published ¿µ¿ª¿¡ ÇÁ·ÎÆÛƼ À̸§°ú µ¥ÀÌÅÍ ÇüÀ» ´Ù½Ã ¼±¾ðÇØ ÁÖ¸é µÈ´Ù. ¿¹Á¦ Äڵ忡¼­ TCar Ŭ·¡½º´Â TVehicle Ŭ·¡½ºÀÇ Public ÇÁ·ÎÆÛƼÀÎ Width, Height, Length¸¦ ¿ÀºêÁ§Æ® ÀνºÆåÅÍ¿¡ ³ªÅ¸³¯ ¼ö ÀÖµµ·Ï Çß´Ù. ±×·¯³ª TCar Ŭ·¡½ºÀÇ Volume ÇÁ·ÎÆÛƼ´Â TVehicle Ŭ·¡½ºÀÇ Volume ÇÁ·ÎÆÛƼ¸¦ ¹«½ÃÇÏ°í »õ·Î¿î ÇÁ·ÎÆÛƼ¸¦ Á¤ÀÇ(Redefining)ÇÏ´Â °ÍÀÓÀ» ÁÖÀÇÇØ¾ß ÇÑ´Ù. ÀÌ·± °æ¿ì¿¡ ºÎ¸ð Ŭ·¡½ºÀÇ ÇÁ·ÎÆÛƼ´Â inherited Áö½ÃÀÚ¸¦ ÀÌ¿ëÇØ¼­ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ºÎ¸ð Ŭ·¡½º¿¡¼­ ¼±¾ðÇÑ ÃʱⰪÀ» ÆÄ»ý Ŭ·¡½º¿¡¼­ ¹«½ÃÇÏ°í ½ÍÀ» °æ¿ì¿¡´Â Height ÇÁ·ÎÆÛƼó·³ nodefault Áö½ÃÀÚ¸¦ »ç¿ëÇÑ´Ù.
1.3.6. ¹è¿­ ÇÁ·ÎÆÛƼ(Array Properties)
¸Þ¸ð ÄÞÆ÷³ÍÆ®¿¡´Â TStrings Ŭ·¡½º ÇüÀÇ Lines¶ó´Â ÇÁ·ÎÆÛƼ°¡ ÀÖ´Ù. ÀÌ ÇÁ·ÎÆÛƼ¸¦ ¿ÀºêÁ§Æ® ÀνºÆåÅÍ¿¡¼­ ´õºí Ŭ¸¯Çϸé TStrings ÇÁ·ÎÆÛƼ ¿¡µðÅͰ¡ µ¿ÀÛÇØ¼­ ¸Þ¸ð¿¡ µé¾î°¥ ³»¿ëÀ» ÀÔ·ÂÇÒ ¼ö°¡ ÀÖ´Ù. ±×·±µ¥ Lines ÇÁ·ÎÆÛƼ¸¦ ½ÇÇà ½Ã¿¡ ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÇÒ ¶§ Memo1.Lines.Strings[1] := '¾Æ¸®¶û 1È£'; ÀÌ·± ½ÄÀ¸·Î ¹è¿­ÀÇ ÇüÅ·Π»ç¿ëÇÒ ¼ö°¡ ÀÖ´Ù. ÀÌ·± ÇÁ·ÎÆÛƼ¸¦ ¹è¿­ ÇÁ·ÎÆÛƼ¶ó°í ÇÑ´Ù. ¹è¿­ ÇÁ·ÎÆÛƼ´Â ÇϳªÀÇ ÇÁ·ÎÆÛƼ¸¦ °¡Áö°í ´Ù¼öÀÇ °ªÀ» Á¶ÀÛÇÒ ¼ö ÀÖµµ·Ï ÇØ ÁÖ¸ç °¢ °ªµéÀº À妽º¸¦ ÅëÇØ¼­ ÂüÁ¶ÇÏ°Ô µÈ´Ù. Classes.pas¿¡ ¼±¾ðµÇ¾î ÀÖ´Â TStrings Ŭ·¡½º¿Í TStringList Ŭ·¡½ºÀÇ ÀϺκÐÀ» ¿¹·Î µé¾î ¼³¸íÇϰڴÙ.

¸®½ºÆ® 1.8 ¹è¿­ ÇÁ·ÎÆÛƼ ¿¹Á¦
unit Classes.pas

  { »ý·« }
  
  { TStrings class }

  TStrings = class(TPersistent)
  private
    { »ý·« }
    function GetValue(const Name: string): string;
    procedure SetValue(const Name, Value: string);
  protected
    { »ý·« }
    function Get(Index: Integer): string; virtual; abstract;
    function GetObject(Index: Integer): TObject; virtual;
    procedure Put(Index: Integer; const S: string); virtual;
    procedure PutObject(Index: Integer; AObject: TObject); virtual;
  public
    { »ý·« }
    property Objects[Index: Integer]: TObject read GetObject write PutObject;
    property Values[const Name: string]: string read GetValue write SetValue;
    property Strings[Index: Integer]: string read Get write Put; default;
  end;

{ »ý·« }

{ TStringList class }

  TStringList = class(TStrings)
  private
    { »ý·« }
  protected
    { »ý·« }
    function Get(Index: Integer): string; override;
    function GetObject(Index: Integer): TObject; override;
    procedure Put(Index: Integer; const S: string); override;
    procedure PutObject(Index: Integer; AObject: TObject); override;
  public
    { »ý·« }
  end;
  
{ »ý·« }

implementation

{ »ý·« }

{ TStrings }

function TStrings.GetObject(Index: Integer): TObject;
begin
  Result := nil;
end;

function TStrings.GetValue(const Name: string): string;
var
  I: Integer;
begin
  I := IndexOfName(Name);
  if I >= 0 then
    Result := Copy(Get(I), Length(Name) + 2, MaxInt) else
    Result := '';
end;
procedure TStrings.Put(Index: Integer; const S: string);
var
  TempObject: TObject;
begin
  TempObject := GetObject(Index);
  Delete(Index);
  InsertObject(Index, S, TempObject);
end;

procedure TStrings.PutObject(Index: Integer; AObject: TObject);
begin
end;

procedure TStrings.SetValue(const Name, Value: string);
var
  I: Integer;
begin
  I := IndexOfName(Name);
  if Value <> '' then
  begin
    if I < 0 then I := Add('');
    Put(I, Name + '=' + Value);
  end else
  begin
    if I >= 0 then Delete(I);
  end;
end;

{ TStringList }

function TStringList.Get(Index: Integer): string;
begin
  if (Index < 0) or (Index >= FCount) then Error(@SListIndexError, Index);
  Result := FList^[Index].FString;
end;

function TStringList.GetObject(Index: Integer): TObject;
begin
  if (Index < 0) or (Index >= FCount) then Error(@SListIndexError, Index);
  Result := FList^[Index].FObject;
end;

procedure TStringList.Put(Index: Integer; const S: string);
begin
  if Sorted then Error(@SSortedListError, 0);
  if (Index < 0) or (Index >= FCount) then Error(@SListIndexError, Index);
  Changing;
  FList^[Index].FString := S;
  Changed;
end;

procedure TStringList.PutObject(Index: Integer; AObject: TObject);
begin
  if (Index < 0) or (Index >= FCount) then Error(@SListIndexError, Index);
  Changing;
  FList^[Index].FObject := AObject;
  Changed;
end;


TStrings Ŭ·¡½º¿¡¼­ Objects, Values, Strings ÇÁ·ÎÆÛƼ´Â ¸ðµÎ ¹è¿­ ÇÁ·ÎÆÛƼ·Î ¼±¾ðµÇ¾î ÀÖ´Ù. ¹è¿­ ÇÁ·ÎÆÛƼ´Â ÀÏ¹Ý ÇÁ·ÎÆÛƼ¿Í ¿©·¯ °¡Áö ´Ù¸¥ Ư¡À» °¡Áö°í Àִµ¥ ù°´Â ¹è¿­ ÇÁ·ÎÆÛƼ¸¦ ¼±¾ðÇÒ ¶§¿¡´Â Strings[Index : Integer]ó·³ ÇÁ·ÎÆÛƼ À̸§ ´ÙÀ½¿¡ ÀÏ¹Ý ¹è¿­Ã³·³ °ýÈ£·Î µÑ·¯ ½ÎÀÎ À妽º ÀÎÀÚ ¸®½ºÆ®¸¦ ¼±¾ðÇØ¾ß Çϸç ÀÎÀÚ´Â ÀÏ¹Ý ÇÁ·Î½ÃÀú³ª ÇÔ¼ö¿¡¼­Ã³·³ ¼±¾ðÇÏ¸é µÈ´Ù. µÎ¹øÂ°·Î Àб⠸޼ҵ峪 ¾²±â ¸Þ¼Òµå¸¦ Á¦°øÇÏ´Â °æ¿ì µ¥ÀÌÅÍ Çʵ带 Á÷Á¢ Á¶ÀÛÇÏ¸é ¾È µÇ°í ¹Ýµå½Ã Get, Putó·³ ¸Þ¼Òµå·Î ¼±¾ðÇØ ÁÖ¾î¾ß ÇÑ´Ù. ¼¼¹øÂ°·Î À妽º ÀÎÀÚ´Â ÀÏ¹Ý ¹è¿­°ú ´Þ¸® ¹Ýµå½Ã ¼­¼öÇüÀÏ ÇÊ¿ä´Â ¾ø´Ù. Values ÇÁ·ÎÆÛƼó·³ ¹®ÀÚ¿­À» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ³×¹øÂ°·Î ¹è¿­ ÇÁ·ÎÆÛƼ´Â ÀÏ¹Ý ¹è¿­Ã³·³ Æ÷ÀÎÅ͸¦ ÅëÇØ ¹è¿­ Àüü¸¦ ÂüÁ¶ÇÒ ¼ö´Â ¾ø°í ´Ü¼øÈ÷ °¢ ¾ÆÀÌÅÛ¸¸ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù.
¹è¿­ ÇÁ·ÎÆÛƼÀÇ Àб⠸޼ҵå´Â Get, GetObject, GetValueó·³ ÇÁ·ÎÆÛƼ ¼±¾ð ½Ã »ç¿ëÇÑ À妽º ÀÎÀÚ ¸®½ºÆ®¿Í °°Àº ÀÎÀÚ¸¦ °¡Á®¾ß ÇÏ¸ç ¾²±â ¸Þ¼Òµå´Â Put, SetObject, SetValueó·³ À妽º ÀÎÀÚ¿Í ÇÁ·ÎÆÛƼÀÇ µ¥ÀÌÅÍ Çü°ú °°Àº ÇüÀÇ ÀÎÀÚ¸¦ Çϳª ´õ °¡Áöµµ·Ï ¼±¾ðÇØ¾ß ÇÑ´Ù.
¿¹Á¦¿¡ ÀÖ´Â ÇÁ·ÎÆÛƼ´Â ¸ðµÎ ´ÜÀÏ À妽º¸¦ °¡Áö´Â ÀÏÂ÷¿ø ¹è¿­ ÇÁ·ÎÆÛƼÁö¸¸ ¾Æ·¡¿Í °°ÀÌ ´ÙÂ÷¿ø ¹è¿­ ÇÁ·ÎÆÛƼµµ ¸¸µé ¼ö ÀÖ´Ù.

type
  TMatrix = class
  private
    { »ý·« }
    function GetEntry(ACol, ARow : Integer) :Real;
    procedure SetEntry(ACol, ARow : Integer, Value : Real);
  public
    property Entry[ACol, ARow : Integer] : Real 
      read GetEntry 
      write SetEntry
  end;


1.3.7. ±âº» ¹è¿­ ÇÁ·ÎÆÛƼ(Default Array Properties)
TStrings Ŭ·¡½ºÀÇ Strings ÇÁ·ÎÆÛƼ¸¦ º¸¸é default ¶ó´Â Áö½ÃÀÚ°¡ º¸ÀÏ °ÍÀÌ´Ù. ÇÁ·ÎÆÛƼ ÃʱⰪ¿¡¼­ ¼³¸íÇÑ default Áö½ÃÀÚ¿Í °°Àºµ¥ ÀÌ»óÇϰԵµ Áö½ÃÀÚ ´ÙÀ½¿¡ ÃʱⰪÀÌ º¸ÀÌÁö ¾Ê´Â´Ù. default Áö½ÃÀÚ´Â µÎ °¡Áö ¿ëµµ·Î »ç¿ëµÈ´Ù. Çϳª´Â À§¿¡¼­ ¼³¸íÇÑ ÇÁ·ÎÆÛƼ ÃʱⰪÀ» ¼³Á¤ÇÒ ¶§ »ç¿ëÇÏ°í ³ª¸ÓÁö Çϳª´Â ±âº» ¹è¿­ ÇÁ·ÎÆÛƼ¸¦ ¼±¾ðÇÒ ¶§ »ç¿ëÇÑ´Ù. ¹è¿­ ÇÁ·ÎÆÛƼ¸¦ ±âº» ¹è¿­ ÇÁ·ÎÆÛƼ·Î ¼±¾ðÇϸé ÇÁ·ÎÆÛƼ¸¦ ÂüÁ¶ÇÒ ¶§ ÇÁ·ÎÆÛƼ À̸§°ú ¹è¿­ ÀÎÀÚ¸¦ »ç¿ëÇØ¼­ ÂüÁ¶ÇÒ ¼öµµ ÀÖÁö¸¸ °´Ã¼ À̸§¸¸À¸·Îµµ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù. Memo1.Lines.Strings[0] À» ÀÌ¿ëÇØ¼­ Lines ÇÁ·ÎÆÛƼÀÇ Ã¹¹øÂ° ¹®ÀÚ¿­À» ÂüÁ¶ÇÒ ¼öµµ ÀÖÁö¸¸ Memo1.Lines[0]¸¦ »ç¿ëÇØµµ µÈ´Ù´Â ¸»ÀÌ´Ù. ´«Ä¡Ã¤½Å µ¶ÀÚµµ ÀÖ°ÚÁö¸¸ ±âº» ¹è¿­ ÇÁ·ÎÆÛƼ´Â Çϳª ¹Û¿¡ ¼±¾ðÇÒ ¼ö ¾øÀ½À» À¯ÀÇÇØ¾ß ÇÑ´Ù.
1.3.8. À妽º ÇÁ·ÎÆÛƼ(Indexed Properties)
¹è¿­ ÇÁ·ÎÆÛƼ´Â ÇϳªÀÇ ÇÁ·ÎÆÛƼ À̸§À¸·Î ´Ù¼öÀÇ °ªÀ» Á¶ÀÛÇÒ ¼ö ÀÖµµ·Ï ÇØÁִµ¥ ¹ÝÇØ À妽º ÇÁ·ÎÆÛƼ´Â ÇϳªÀÇ Àбâ/¾²±â ¸Þ¼Òµå¸¦ ÅëÇØ ´Ù¼öÀÇ ÇÁ·ÎÆÛƼ¸¦ Á¶ÀÛÇÒ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù. ¾Æ·¡ ¿¹Á¦ Äڵ带 Çѹø »ìÆìº¸ÀÚ. ¿¹Á¦ ÄÚµå´Â ¸®½ºÆ® 6.7¿¡¼­ »ç¿ëÇÑ TVehicle Ŭ·¡½º¸¦ À妽º ÇÁ·ÎÆÛƼ¸¦ ¼³¸íÇϱâ ÁÁ°Ô ¾à°£ ¼öÁ¤Çß´Ù.
À妽º ÇÁ·ÎÆÛƼ¸¦ ¼±¾ðÇÒ ¶§´Â index Áö½ÃÀÚ¿Í À妽º ¹øÈ£¸¦ ÇÁ·ÎÆÛƼ µ¥ÀÌÅÍ Çü°ú ÀÐ±â ¸Þ¼Òµå »çÀÌ¿¡ ½á ÁØ´Ù. ¿¹Á¦¿¡¼­ º¸´Â °Íó·³ TVehicle Ŭ·¡½ºÀÇ Width, Height, Length ÇÁ·ÎÆÛƼ´Â ¸ðµÎ GetDimension, SetDimension ¸Þ¼Òµå¸¦ »ç¿ëÇØ¼­ °ªÀ» Á¶ÀÛÇÏ°Ô µÇ¸ç À妽º¸¦ ÅëÇØ¼­ °¢ ÇÁ·ÎÆÛƼ¸¦ ±¸º°Çϵµ·Ï µÇ¾î ÀÖ´Ù.

¸®½ºÆ® 1.9 À妽º ÇÁ·ÎÆÛƼ ¿¹Á¦
type
  TVehicle = class(TComponent)
  private
    FDimensions : Array[1..3] of integer;

    function  GetDimension(Index : integer) : Integer;
    procedure SetDimension(Index : Integer; const Value : integer);

  public
    constructor Create(AOwner : TComponent); override;

    property Width : integer index 1 read GetDimension write SetDimension;
    property Height : integer index 2 read GetDimension write SetDimension;
    property Length : integer index 3 read GetDimension write SetDimension;
  end;

implementation

function TVehicle.GetDimension(Index : Integer) : Integer;
begin
  Result := FDimensions[Index];
end;

procedure TVehicle.SetDimension(Index : Integer; const Value : Integer);
begin
  if FDimensions[Index] <> Value then
FDimensions[Index] := Value;
end;


1.3.9. ÇÁ·ÎÆÛƼ ÀúÀå ¿©ºÎ °áÁ¤
¾îÇø®ÄÉÀÌ¼Ç °³¹ßÀÚ°¡ ¿ÀºêÁ§Æ® ÀνºÆåÅÍ¿¡¼­ ÇÁ·ÎÆÛƼ °ªÀ» º¯°æÇÏ¸é ±× °ªµéÀº Æû ÆÄÀÏ(*.dfm)¿¡ ÀúÀåµÈ´Ù. »ç½Ç Æû ÆÄÀÏÀº À©µµ ¸®¼Ò½º ÆÄÀÏÀ̱⠶§¹®¿¡ ÄÄÆÄÀÏÇÒ ¶§ ½ÇÇà ÆÄÀÏ¿¡ µ¡ºÙ¿©Áö°Ô µÇ¸ç ¾îÇø®ÄÉÀ̼ÇÀÌ ½ÇÇàµÉ ¶§´Â ÆûÀ» »ý¼ºÇϰí ÃʱⰪµé·Î ¼³Á¤µÈ °¢ ÇÁ·ÎÆÛƼÀÇ °ªµéÀ» ÀÌ ¸®¼Ò½º¸¦ ÀÌ¿ëÇØ¼­ ÃÖÁ¾ °ª(¾îÇø®ÄÉÀÌ¼Ç °³¹ßÀÚ°¡ Æû ¼³°è ½Ã ¼³Á¤ÇÑ °ª)À¸·Î ¼³Á¤ÇÏ°Ô µÇ¾î ÀÖ´Ù. Æû ÆÄÀÏ¿¡´Â Æû »Ó¸¸ ¾Æ´Ï¶ó ÆûÀÌ °¡Áö°í ÀÖ´Â ¸ðµç ÄÞÆ÷³ÍÆ®ÀÇ Published ÇÁ·ÎÆÛƼ°¡ ÇÁ·ÎÆÛƼ À̸§°ú °ªÀÇ ÇüÅ·ΠÀúÀåµÇ´Âµ¥ ¾Õ¿¡¼­µµ ¾Ö±âÇÑ °Íó·³ ÃʱⰪ°ú ´Ù¸¦ °æ¿ì¿¡¸¸ ÀúÀåµÈ´Ù. ´ëºÎºÐÀÇ °æ¿ì ÀÌ·± ÀϹÝÀûÀΠó¸® ¹æ¹ýÀ» »ç¿ëÇÏ¸é µÇÁö¸¸ °¡²û¾¿ ÄÞÆ÷³ÍÆ® °³¹ßÀÚ´Â ÇÁ·ÎÆÛƼ¸¦ ÀúÀåÇÒÁö ¸»Áö¸¦ Ưº°È÷ ÁöÁ¤ÇØ¾ß ÇÒ °æ¿ì°¡ »ý±ä´Ù. ³ªÁß¿¡ ½ÇÀü ¿¹Á¦¿¡¼­ ³ª¿À°ÚÁö¸¸ About ÇÁ·ÎÆÛƼ °°Àº °æ¿ì ÄÞÆ÷³ÍÆ®¿¡ ´ëÇÑ ÀϹÝÀûÀÎ Á¤º¸(°³¹ßÀÚ, ÀúÀÛ±Ç µî)¸¸À» ³ªÅ¸³¾ »Ó ÄÞÆ÷³ÍÆ®ÀÇ µ¿ÀÛ°ú´Â ÀüÇô ¹«°üÇÑ ÇÁ·ÎÆÛƼÀ̱⠶§¹®¿¡ ±»ÀÌ ºÒÇÊ¿äÇÑ ÇÁ·ÎÆÛƼ¸¦ Æû ÆÄÀÏ¿¡ ÀúÀåÇØ¼­ ½ÇÇà ÆÄÀÏÀÇ Å©±â¸¦ ´Ã¸± ÇÊ¿ä´Â ¾ø´Ù.
ÇÁ·ÎÆÛƼ °ªÀ» ÀúÀåÇÒÁö ¸»Áö¸¦ °áÁ¤ÇÏ´Â ¹æ¹ýÀº ¾Õ¿¡¼­ ¾ê±âÇÑ default, nodefault Áö½ÃÀÚ¿Í ÇÔ²² stored Áö½ÃÀÚ¸¦ »ç¿ëÇÑ´Ù. stored Áö½ÃÀÚ´Â ÇÁ·ÎÆÛƼ¸¦ ¼±¾ðÇÒ ¶§ write Àý ´ÙÀ½¿¡ »ç¿ëÇϸç Boolean Çü »ó¼ö³ª Boolean ÇüÀ» °¡Áö´Â µ¥ÀÌÅÍ ÇÊµå ¶Ç´Â ÀÎÀÚ°¡ ¾ø°í Boolean ÇüÀ» ¹ÝȯÇÏ´Â ÇÔ¼ö¸¦ ¹Ù·Î µÚ¿¡ ½á ÁØ´Ù. ¾Æ·¡ ¿¹Á¦´Â Controls.pas¿¡¼­ ¹ßÃéÇÑ °ÍÀ¸·Î ClientHeightÀÇ °æ¿ì´Â »ó¼ö¸¦ »ç¿ëÇÏ¿´°í Color ÇÁ·ÎÆÛƼ´Â ÇÔ¼ö¸¦ »ç¿ëÇϰí ÀÖ´Ù.

¸®½ºÆ® 1.10 stored Áö½ÃÀÚ »ç¿ë ¿¹Á¦
unit Controls.pas
...
property ClientHeight: Integer read GetClientHeight write SetClientHeight stored False;
property Color: TColor read FColor write SetColor stored IsColorStored default clWindow;
...
function TControl.IsColorStored: Boolean;
begin
  Result := not ParentColor;
end;




ÄÞÆ÷³ÍÆ®´Â ¾îÇø®ÄÉÀÌ¼Ç ½ÇÇà ½Ã¿¡ ÀÚ½ÅÀÇ ÇÁ·ÎÆÛƼ¸¦ Æû ÆÄÀÏ¿¡¼­ ÀÐ¾î µéÀÎ ÈÄ¿¡ ´Ù¸¥ ÃʱâÈ­ ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖµµ·Ï Loaded ¶ó´Â °¡»ó ¸Þ¼Òµå¸¦ È£ÃâÇϵµ·Ï µÇ¾î ÀÖ´Ù. ±×·¡¼­ ÇÁ·ÎÆÛƼ°¡ ÀÐÇôÁø ÈÄ¿¡ ¾î¶² ÀÛ¾÷À» ÇÏ°í ½ÍÀ¸¸é Loaded ¸Þ¼Òµå¸¦ ¿À¹ö¶óÀ̵åÇØ¼­ ÇÏ°í ½ÍÀº ÀÛ¾÷À» Ãß°¡ÇØÁÖ¸é µÈ´Ù. Loaded ¸Þ¼Òµå´Â ÄÞÆ÷³ÍÆ®°¡ È­¸é¿¡ º¸¿©Áö±â Àü¿¡ È£ÃâµÇ¹Ç·Î È­¸éÀÌ ±ô¹Ú°Å¸®´Â °Í¿¡ ´ëÇÑ °ÆÁ¤Àº ÇÏÁö ¾Ê¾Æµµ µÈ´Ù.





ÀúÀ۱ǿ¡ ´ëÇÑ °øÁö
ÀÌ ¹®¼­¿¡ Æ÷ÇÔµÈ ¸ðµç ±Û°ú ¼Ò½º ÄÚµå´Â ÀÛÀÚÀÎ Àú ±è¼ºµ¿ÀÇ ÁöÀû Àç»êÀÌÁö¸¸ ¹«´ÜÀ¸·Î ¹èÆ÷Çϰųª Ã¥À̳ª °­ÀÇ ±³ÀçµîÀ» À§ÇÑ º¹Á¦ µî ÀúÀÛ±ÇÀ» ÀúÇØÇÏ´Â ÇàÀ§¸¦ Á¦¿ÜÇϰí´Â ÀÚÀ¯·Ó°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
¶ÇÇÑ ÀÌ ÆäÀÌÁö¿¡ ´ëÇÑ ¸µÅ©´Â ÀÚÀ¯·Ó°Ô ÇÒ ¼ö ÀÖÀ¸³ª Àü¹®À» ÀüÁ¦ÇÏ´Â ÀÏÀº Çã¿ëÇÏÁö ¾Ê½À´Ï´Ù.