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


3. ÄÞÆ÷³ÍÆ® °³¹ßÀÇ °í±Þ ±â¼ú

3.1. °³¿ä

ÀÌÀü Àå¿¡¼­ ¸î°¡Áö ÄÞÆ÷³ÍÆ®¸¦ °³¹ßÇØ º¸¾Ò´Ù. ÇÏÁö¸¸ ¾ÆÁ÷ Á¤º¹ÇؾßÇÒ »êÀº ³²¾Æ ÀÖ´Ù. ÄÞÆ÷³ÍÆ®¸¦ °³¹ßÇØ¼­ È¥ÀÚ¼­ »ç¿ëÇÑ´Ù¸é ¾Æ¸¶µµ À̹ø Àå¿¡¼­ ¾ê±âÇÏ°Ô µÉ ³»¿ëÀÌ ±×¸® Áß¿äÇÏ°Ô »ý°¢µÇÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. ÇÏÁö¸¸ ÄÞÆ÷³ÍÆ®¸¦ °³¹ßÇØ¼­ ´Ù¸¥ »ç¶÷ÀÌ »ç¿ëÇϵµ·Ï ¹èÆ÷Çϰųª »ó¿ëÀ¸·Î ÆÇ¸ÅÇÏ°Ô µÈ´Ù¸é »óȲÀº ´Þ¶óÁø´Ù. ¿ÀºêÁ§Æ® ÀνºÆåÅͰ¡ ó¸®ÇÏÁö ¸øÇÏ´Â ÇÁ·ÎÆÛƼ¸¦ ½±°Ô Á¶ÀÛÇÒ ¼ö ÀÖµµ·Ï ÇØ ÁÖ´Â ÇÁ·ÎÆÛƼ ¿¡µðÅͳª º¹ÀâÇÑ ÄÞÆ÷³ÍÆ®ÀÇ ÇÁ·ÎÆÛƼµéÀ» Á» ´õ ½±°í Á÷°üÀûÀ¸·Î Á¶ÀÛÇÒ ¼ö ÀÖµµ·Ï Æû µðÀÚÀ̳ʿ¡¼­ ÄÞÆ÷³ÍÆ®¸¦ ´õºí Ŭ¸¯Çϰųª ÄÞÆ÷³ÍÆ® ÄÜÅØ½ºÆ® ¸Þ´º¿¡¼­ ½ÇÇàµÇ´Â ÄÞÆ÷³ÍÆ® ¿¡µðÅÍ(TeeChart ÄÞÆ÷³ÍƲ¸¦ Æû¿¡ ¿Ã·Á ³õ°í ¸¶¿ì½º ¿À¸¥ÂÊ ¹öưÀ» ´­·¯ º¸¶ó)µµ Á¦°øÇØ ÁÖ´Â °ÍÀÌ ÁÁÀ» °ÍÀÌ´Ù. ±×¸®°í ÄÞÆ÷³ÍÆ®¸¦ ¼³Ä¡Çؼ­ »ç¿ëÇÏ´Â »ç¿ëÀÚµéÀº ÄÞÆ÷³ÍÆ® µµ¿ò¸»ÀÌ µ¨ÆÄÀÌ IDE¿Í ¿Ïº®ÇÏ°Ô ÅëÇÕµÇ¾î µ¿ÀÛÇϱ⸦ ¿øÇÒ °ÍÀÌ´Ù.
À̹ø Àå¿¡¼­´Â ÀÌ·± °í±Þ ±â¹ýµé¿¡ ´ëÇØ¼­ ÀÚ¼¼ÇÏ°Ô ¾Ë¾Æ º¸°Ú´Ù. ±×¸® ¾î·Á¿î ÀÏÀº ¾Æ´Ï´Ï ³Ê¹« °ÆÁ¤ÇÏÁö ¾Ê¾Æµµ µÈ´Ù.

3.2. °í±Þ RTTI(Run-Time Type Information)

3.2.1. °³¿ä
1Àå¿¡¼­ RTTIÀÇ is ¿¬»êÀÚ¿Í as ¿¬»êÀÚ¿¡ ´ëÇØ ¾Ë¾Æ º¸¾Ò´Ù. ÇÏÁö¸¸ À̰ÍÀÌ RTTIÀÇ ¸ðµç °ÍÀº ¾Æ´Ï´Ù. RTTI´Â ÄÄÆÄÀÏ·¯°¡ ÄÚµå ¼¼±×¸ÕÆ®¿¡ Ãß°¡ÇØ ÁÖ´Â Á¤º¸·Î¼­ Published ÇÁ·ÎÆÛƼ³ª Ŭ·¡½º¿¡ ´ëÇÑ ½Éº¼ Á¤º¸µéÀÌ´Ù. RTTI °ü·Ã ÇÔ¼ö³ª ÇÁ·Î½ÃÀú´Â TypInfo.pas¿¡ Á¤ÀǵǾî ÀÖ´Ù. ÇÏÁö¸¸ RTTI´Â ´Ù¸¥ ³»¿ëµé°ú ´Þ¸® µ¨ÆÄÀÌ µµ¿ò¸»À̳ª ¹®¼­¿¡¼­ ºñ±³Àû Àß ´Ù·ç°í ÀÖÁö ¾Ê´Ù. ¿Ö³ÄÇϸé ÀÌ Á¤º¸µéÀº µ¨ÆÄÀÌ IDE°¡ Á¤»óÀûÀ¸·Î µ¿ÀÛÇϴµ¥ Áß¿äÇÑ ¿ªÇÒÀ» Çϰí ÀÖ°í ÄÄÆÄÀÏ·¯¿Í ¹ÐÁ¢ÇÑ ¿¬°üÀ» °¡Áö°í À־ ÄÄÆÄÀÏ·¯°¡ ¾÷±×·¹À̵åµÉ ¶§¸¶´Ù RTTIÀÇ ±â´ÉÀÌ º¯°æµÉ ¼ÒÁö°¡ ¸¹±â ¶§¹®ÀÌ´Ù.
À̹ø Àý¿¡¼­´Â ÄÞÆ÷³ÍÆ® °³¹ß »Ó¸¸ÀÌ ¾Æ´Ï°í ¾îÇø®ÄÉÀÌ¼Ç °³¹ß½Ã¿¡µµ ¾ÆÁÖ À¯¿ëÇÑ RTTI ÇÔ¼ö³ª ÇÁ·Î½ÃÀú¿¡ ´ëÇØ ÀÚ¼¼ÇÏ°Ô ¾Ë¾Æ º¸µµ·Ï ÇϰڴÙ.
3.2.2. ¿­°ÅÇü °ü·Ã RTTI ÇÔ¼ö
¿­°ÅÇüÀº µ¨ÆÄÀÌ¿¡¼­ ¸¹ÀÌ »ç¿ëÇÏ´Â µ¥ÀÌÅÍ Çü ÁßÀÇ ÇϳªÀÌ´Ù. µ¨ÆÄÀÌ¿¡¼­ »ç¿ëÇϰí ÀÖ´Â ¸¹Àº ¿­°ÅÇü Áß¿¡¼­ ÄÞÆ÷³ÍÆ® ÆÈ·¹Æ® Win32 ÆäÀÌÁö¿¡ ÀÖ´Â TAnimate ÄÞÆ÷³ÍÆ®ÀÇ CommonAVI ÇÁ·ÎÆÛƼ ÇüÀÎ TCommonAVI¸¦ ¿¹·Î µé¾îº¸ÀÚ. TCommonAVI´Â ComCtrls.pas¿¡ ¾Æ·¡¿Í °°ÀÌ ¼±¾ðµÇ¾î ÀÖ´Ù.

TCommonAVI = (aviNone, aviFindFolder, aviFindFile, aviFindComputer, aviCopyFiles,
    aviCopyFile, aviRecycleFile, aviEmptyRecycle, aviDeleteFile);


RTTI¿¡¼­´Â ¿­°ÅÇü°ú °ü·ÃµÈ µÎ°¡Áö ÇÔ¼ö¸¦ Á¦°øÇϴµ¥ Çϳª´Â ¿­°ÅÇüÀÇ °¢ ¸â¹ö¸¦ ¹®ÀÚ¿­·Î ¹ÝÈ¯ÇØ ÁÖ´Â GetEnumName ÇÔ¼ö¿Í ÁöÁ¤ÇÑ ¹®ÀÚ¿­À» °¡Áö°í ¿­°ÅÇü³»¿¡¼­ÀÇ ¼ø¼­¸¦ ¹ÝÈ¯ÇØ ÁÖ´Â GetEnumValue ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù.
GetEnumName ÇÔ¼öÀÇ ¿øÇüÀº ¾Æ·¡¿Í °°´Ù.

function GetEnumName(TypeInfo: PTypeInfo; Value: Integer): string;


GetEnumName ÇÔ¼öÀÇ Ã¹¹øÂ° ÀÎÀÚ´Â ¿­°ÅÇüÀÇ Çü Á¤º¸(TypeInfo)¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÌ¸ç µÎ¹øÂ° ÀÎÀÚ´Â ¹®ÀÚ¿­·Î º¯È¯ÇÏ°í ½ÍÀº ¸â¹öÀÇ ¿­°ÅÇü³»¿¡¼­ÀÇ ¼ø¼­ÀÌ´Ù.
GetEnumValue ÇÔ¼öÀÇ ¿øÇüÀº ¾Æ·¡¿Í °°À¸¸ç ù¹øÂ° ÀÎÀÚ´Â GetEnumName°ú °°ÀÌ Çü Á¤º¸¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÌ¸ç µÎ¹øÂ° ÀÎÀÚ´Â ¿­°ÅÇü ¸â¹ö¸¦ ³ªÅ¸³»´Â ¹®ÀÚ¿­ÀÌ´Ù.

function GetEnumValue(TypeInfo: PTypeInfo; const Name: string): Integer;


µÎ ÇÔ¼ö ¸ðµÎ ¿­°ÅÇüÀÇ Çü Á¤º¸¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ù¹øÂ° ÀÎÀÚ·Î »ç¿ëÇÑ´Ù. ÀÌ Æ÷ÀÎÅÍ´Â TypeInfo ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é ½±°Ô ¾òÀ» ¼ö ÀÖ´Ù. TypeInfo ÇÔ¼öÀÇ ¿øÇüÀº ¾Æ·¡¿Í °°°í ÀÎÀÚ´Â ÄÄÆÄÀÏ·¯°¡ »ý¼ºÇÑ RTTI Æ÷ÀÎÅ͸¦ ±¸ÇÏ°í ½ÍÀº ÇüÀÇ Áö½ÃÀÚ(Type Identifier)¸¦ »ç¿ëÇÏ¸é µÈ´Ù.

function TypeInfo(TypeIdent): Pointer;


µû¶ó¼­ ¿­°ÅÇü TCommonAVIÀÇ aviFindFile ¸â¹ö¿¡ ´ëÇÑ ¹®ÀÚ¿­À» ¾ò°í ½ÍÀ¸¸é ¾Æ·¡¿Í °°ÀÌ ÇÏ¸é µÇ¸ç ¹Ý´ëÀÇ °æ¿ìµµ ¸¶Âù°¡ÁöÀÌ´Ù.

var
  TypeStr : string;
  TypeOrd : Integer;
begin
  TypeStr := GetEnumName(TypeInfo(TCommonAVI), Ord(aviFindFile));
  ShowMessage(TypeStr);
  TypeOrd := GetEnumValue(TypeInfo(TCommonAVI), TypeStr);
  ShowMessage(IntToStr(TypeOrd));
end;


3.2.3. ÇÁ·ÎÆÛƼ °ü·Ã RTTI ÇÔ¼ö
µ¨ÆÄÀÌ Æû µðÀÚÀ̳ʿ¡¼­ ÆûÀ̳ª ÆûÀÌ ¼ÒÀ¯Çϰí ÀÖ´Â ÄÞÆ÷³ÍÆ®¸¦ ¼±ÅÃÇÏ¸é ¿ÀºêÁ§Æ® ÀνºÆåÅÍ´Â ¼±ÅÃµÈ ÄÞÆ÷³ÍÆ®ÀÇ Published ÇÁ·ÎÆÛƼ ¸®½ºÆ®¸¦ ±¸ÇÏ°í °¢°¢ÀÇ ÇÁ·ÎÆÛƼ¿Í ¿¬°áµÈ ÇÁ·ÎÆÛƼ ¿¡µðÅ͸¦ »ý¼ºÇÑ´Ù. ±×·¸´Ù¸é ¿ÀºêÁ§Æ® ÀνºÆåÅÍ´Â ¾î¶»°Ô ÄÞÆ÷³ÍÆ®ÀÇ ÇÁ·ÎÆÛƼ ¸®½ºÆ®¸¦ ±¸ÇÒ±î?
ÄÞÆ÷³ÍÆ®ÀÇ ÇÁ·ÎÆÛƼ ¸®½ºÆ®´Â GetPropList ÇÔ¼ö¸¦ ÅëÇØ¼­ ±¸ÇÒ ¼ö ÀÖ´Ù. GetPropList ÇÔ¼öÀÇ ¿øÇüÀº ¾Æ·¡¿Í °°´Ù.

functionGetPropList(TypeInfo: PTypeInfo; TypeKinds: TTypeKinds; PropList: PPropList): Integer;


ù¹øÂ° ÀÎÀÚ´Â GetEnumName, GetEnumValue¿¡¼­¿Í ¸¶Âù°¡Áö·Î Çü Á¤º¸¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÌ´Ù. ÇÏÁö¸¸ GetEnumNameÀ̳ª GetEnumValue¿¡¼­Ã³·³ TypeInfo ÇÔ¼ö¸¦ ½á¼­ PTypeInfo ÀÎÀÚ¸¦ ±¸ÇÏÁö ¾Ê°í GetPropList´Â °´Ã¼¿¡ ´ëÇØ »ç¿ëÇÏ´Â °ÍÀ̱⠶§¹®¿¡ ÄÞÆ÷³ÍÆ®ÀÇ ClassInfo ÇÁ·ÎÆÛƼ¸¦ ³Ö¾î ÁÖ¾î¾ß ÇÑ´Ù.
µÎ¹øÂ° ÀÎÀÚ´Â ÃßÃâÇÒ ÇÁ·ÎÆÛƼÀÇ Á¾·ù¸¦ ÁöÁ¤ÇÑ´Ù. TTypeKinds´Â ÇÁ·ÎÆÛƼ Á¾·ù¸¦ ³ªÅ¸³»´Â ÁýÇÕÇüÀ¸·Î¼­ ¾Æ·¡¿Í °°ÀÌ ¼±¾ðµÇ¾î ÀÖ´Ù.

type
  TTypeKind = (tkUnknown, tkInteger, tkChar, tkEnumeration, tkFloat,
    tkString, tkSet, tkClass, tkMethod, tkWChar, tkLString, tkWString,
    tkVariant, tkArray, tkRecord, tkInterface, tkInt64, tkDynArray);
  TTypeKinds = set of TTypeKind;

const
  tkAny = [Low(TTypeKind)..High(TTypeKind)];
  tkMethods = [tkMethod];
  tkProperties = tkAny - tkMethods - [tkUnknown];


¸¶Áö¸· ÀÎÀÚÀÎ PPropList´Â TPropInfoÀÇ ¹è¿­ÀÎ TPropList¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÌ´Ù. TPropList´Â ÃÖ´ë 16380°³ÀÇ ÇÁ·ÎÆÛƼ Á¤º¸¸¦ °¡Áú ¼ö ÀÖµµ·Ï ¼±¾ðµÇ¾î ÀÖ´Ù. TPropList´Â ÇÁ·ÎÆÛƼÀÇ À̸§°ú ÇÁ·ÎÆÛƼ Çü Á¤º¸¸¦ °¡Áö°í ÀÖ´Â ±¸Á¶Ã¼ÀÌ´Ù.
GetPropList ÇÔ¼ö´Â PPropList¿¡ ±¸ÇØÁø ÇÁ·ÎÆÛƼÀÇ °³¼ö¸¦ ¹ÝȯÇÑ´Ù.

GetPropList ÇÔ¼öÀÇ »ç¿ëÇÑ °£´ÜÇÑ ÇÁ·ÎÁ§Æ® PropList¸¦ Çϳª ¸¸µé¾î º¸ÀÚ. ¾Æ·¡ ±×¸²Àº PropList ÀÇ ½ÇÇà È­¸éÀÌ´Ù.

±×¸² 3-1 GetPropList ¿¹Á¦


¼Ò½º Äڵ带 º¸¸é ÆûÀÌ »ý¼ºµÉ ¶§ ÆûÀÌ ¼ÒÀ¯Çϰí ÀÖ´Â ÄÞÆ÷³ÍÆ® ¸®½ºÆ®¸¦ ÄÞº¸ ¹Ú½º¿¡ Ãß°¡ÇØ ÁØ´Ù.

procedure TfrmPropList.FormCreate(Sender: TObject);
var
  nIndex : Integer;
begin
  for nIndex := 0 to Pred(ComponentCount) do
  begin
    cbComponent.Items.Add(Components[nIndex].Name);
  end;
end;


±×¸®°í ÄÞº¸ ¹Ú½º¿¡¼­ ÄÞÆ÷³ÍÆ®¸¦ ¼±ÅÃÇÏ¸é ¼±ÅÃµÈ ÄÞÆ÷³ÍÆ®ÀÇ ÇÁ·ÎÆÛƼ ¸®½ºÆ®¸¦ ¸®½ºÆ® ¹Ú½º¿¡ Ãß°¡ÇØ ÁÖµµ·Ï µÇ¾î ÀÖ´Ù.

procedure TfrmPropList.cbComponentChange(Sender: TObject);
var
  nIndex, nCount : Integer;
  PropList : PPropList;
  CompName : string;
begin
  if cbComponent.ItemIndex <> -1 then
  begin
    PropList := Allocmem(SizeOf(TPropList));
    try
      CompName := cbComponent.Items[cbComponent.ItemIndex];
      lstProperty.Items.Clear;
      nCount := GetPropList(FindComponent(CompName).ClassInfo, tkAny, PropList);
      for nIndex := 0 to Pred(nCount) do
      begin
        lstProperty.Items.Add(PropList[nIndex]^.Name);
      end;
    finally
      Freemem(PropList);
    end;
  end;
end;


GetPropList¸¦ »ç¿ëÇÏÁö ¾Ê°í ÄÞÆ÷³ÍÆ®ÀÇ ÁöÁ¤ÇÑ ÇÁ·ÎÆÛƼ Çϳª¿¡ ´ëÇÑ Á¤º¸¸¦ ±¸ÇÏ°í ½ÍÀ» ¶§´Â GetPropInfo ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. GetPropInfo´Â TPropInfo ±¸Á¶Ã¼¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÎ PPropInfo¸¦ ¹ÝȯÇϴµ¥ TPropInfo ±¸Á¶Ã¼´Â ¾Æ·¡¿Í °°ÀÌ ¼±¾ðµÇ¾î ÀÖ´Ù.

  PPropInfo = ^TPropInfo;
  TPropInfo = packed record
    PropType: PPTypeInfo;
    GetProc: Pointer;
    SetProc: Pointer;
    StoredProc: Pointer;
    Index: Integer;
    Default: Longint;
    NameIndex: SmallInt;
    Name: ShortString;
  end;


±×¸®°í TPropInfo ±¸Á¶Ã¼ÀÇ ¸â¹öÀÎ PPTypeInfo´Â ¾Æ·¡¿Í °°ÀÌ ¼±¾ðµÇ¾î ÀÖ´Ù.

  PPTypeInfo = ^PTypeInfo;
  PTypeInfo = ^TTypeInfo;
  TTypeInfo = record
    Kind: TTypeKind;
    Name: ShortString;
  end;


GetPropInfo¿Í GetXXXProp, SetXXXProp ÇÔ¼öµéÀ» ÀÌ¿ëÇÏ¸é ½ÇÇà ½Ã¿¡ ÄÞÆ÷³ÍÆ®ÀÇ ÇÁ·ÎÆÛƼ¸¦ ¹®ÀÚ¿­·Î ÂüÁ¶ÇÒ ¼ö°¡ ÀÖ´Ù. ¿¹¸¦ µé¾î

var
  PropInfo : PPropInfo;
begin
  PropInfo := GetPropInfo(Form1.ClassInfo, 'Caption');
  ShowMessage('Form1ÀÇ Caption --> ' + GetStrProp(Form1, PropInfo));
end;


ÀÌ¿Í °°Àº °æ¿ì ¹®ÀÚ¿­ »ó¼ö 'Caption' À» ÀÌ¿ëÇØ¼­ Form1ÀÇ Caption ÇÁ·ÎÆÛƼ¸¦ Á¶ÀÛÇϰí ÀÖ´Ù.
GetXXXProp, SetXXXPropÀº ¿À¹ö·ÎµåµÈ ÇÔ¼ö·Î¼­ ¿¹¿Í °°ÀÌ PropInfo¸¦ ÀÎÀÚ·ÎÇÏ´Â °Íµµ ÀÖÁö¸¸ ´Ü¼øÈ÷ ÇÁ·ÎÆÛƼ À̸§À» ¹®ÀÚ¿­·Î ¹Þ¾Æ¼­ ó¸®ÇØÁÖ´Â ÇÔ¼öµµ ¼±¾ðµÇ¾î ÀÖ´Ù. ÀÌ¿Í °°Àº ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¸é Æû ½ÇÇà ½Ã¿¡ ¿ÀºêÁ§Æ® ÀνºÆåÅÍ ±â´ÉÀ» ÇÏ´Â µµ±¸¸¦ ¸¸µé¾î º¼ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù.
±× ¹Û¿¡ ÇÁ·ÎÆÛƼ¿Í °ü·ÃµÈ À¯¿ëÇÑ RTTI ÇÔ¼ö¸¦ ¾Æ·¡ Ç¥¿¡ ³ªÅ¸³»¾úÀ¸´Ï Âü°íÇϱ⠹ٶõ´Ù.

Ç¥ 3-1 ÇÁ·ÎÆÛƼ¿Í °ü·ÃµÈ ÇÔ¼ö
ÇÔ¼ö¼³¸í
IsPublishedPropÄÞÆ÷³ÍÆ®¿¡ ÁöÁ¤ÇÑ À̸§À» °¡Áø ÇÁ·ÎÆÛƼ°¡ ÀÖ´ÂÁö Á¶»çÇÑ´Ù.
IsStoredPropÁöÁ¤ÇÑ ÇÁ·ÎÆÛƼ°¡ Æû ÆÄÀÏ¿¡ ÀúÀåµÇ´ÂÁö¸¦ Á¶»çÇÑ´Ù.
PropIsTypeÁöÁ¤ÇÑ ÇÁ·ÎÆÛƼÀÇ ÇüÀÌ ÁöÁ¤ÇÑ Çü(TTypeKind)À̸é ÂüÀ» ¹ÝȯÇÑ´Ù.
PropTypeÁöÁ¤ÇÑ ÇÁ·ÎÆÛƼÀÇ Çü(TTypeKind)À» ¹ÝȯÇÑ´Ù.





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