±ÍÇÏ´Â ¼Õ´Ô À̽ʴϴÙ
·Î±×ÀÎ
ȸ¿ø°¡ÀÔ
  
  µ¨¸¶´ç °ø½Ä ÀºÇà°èÁÂ
  ÇϳªÀºÇà 227-910235-83607
  ¿¹±ÝÁÖ ÀÌ»ó±¹(¿î¿µÁø)
ÇÁ·ÎÁ§Æ® °Ô½ÃÆÇ
ÅõÇ¥°Ô½ÃÆÇ
µ¨¸¶´ç¼Ò°³
±âÃʺÎÅÍ È°¿ë±îÁö! µ¨ÆÄÀÌ ±³À° - µ¥ºê±â¾î
°­ÁÂ, ÆÁ, Á¤º¸ °­ÁÂ, ÆÁ, Á¤º¸ ÀÔ´Ï´Ù.
±Û³»¿ë - °­ÁÂ, ÆÁ, Á¤º¸
 Spring4d °­Á 3 Generic Collection Library
ÁÖÁ¤¼·
(ÁÖÁ¤¼·)
2016-12-06 ¿ÀÀü 10:02:15
Ä«Å×°í¸®: ÆÁ
3043ȸ Á¶È¸



µî·ÏµÈ ÆÄÀÏÀÌ ¾ø½À´Ï´Ù.
List, Map, Dictionary, Queue, Stack µî°ú °°Àº Ä÷º¼Ç ¶óÀ̺귯¸®°¡ Àִٸ頸ſì ÄÚµùÀÌ ÆíÇØÁø´Ù. ¿¹Àü µ¨ÆÄÀÌ¿¡´Â À̰͵éÀÌ ¾ø¾î¼­, TList¸¦ »ó¼Ó¹Þ°Å³ª ³»ºÎ ¸â¹ö·Î °¡Áö°Å³ª Çؼ­ À̵éÀ» Èä³»³Â´Ù. ¶Ç´Â °³¹ßÀÚ ½º½º·Î º°µµÀÇ Ä÷º¼Ç ¶óÀ̺귯¸®¸¦ ¸¸µé¾ú´Ù. ±×·±µ¥,  °ú°ÅÀÇ µ¨ÆÄÀÌ Ä÷º¼Ç ¶óÀ̺귯¸®µéÀº ¿ä¼Ò¸¦ ÂüÁ¶ÇÒ ¶§ Çüº¯È¯À» ÇؾߠÇϱ⠶§¹®¿¡ ÄÚµùÀÌ ¾µµ¥¾øÀÌ º¹ÀâÇß´Ù. ±×·¯´Ù, µåµð¾î µ¨ÆÄÀÌ XE ÀÌ»ó ¹öÀü¿¡¼­ Áö³×¸¯ÀÌ Ãß°¡µÇ°í, ´õºÒ¾î ÁøÁ¤ÇÑ Áö³×¸¯ Ä÷º¼Ç ¶óÀ̺귯¸®°¡ Ãß°¡µÇ¸é¼­ ÀÌ Çüº¯È¯ÀÇ ºÒÆíÇÔÀº »ç¶óÁ³´Ù. ±×·¯³ª µ¨ÆÄÀÌ Ä÷º¼Ç ¶óÀ̺귯¸®¿¡´Â Ä¡¸íÀûÀΠ´ÜÁ¡ÀÌ ÀÖ´Ù. ÀÚµ¿ Æı«°¡ ¾ÈµÈ´Ù´Â °ÍÀÌ´Ù. 

Spring4d ´Â º°µµÀÇ Generic Colllection Library¸¦ Á¦°øÇÑ´Ù. ¾Æ¸¶µµ Spring4d°³¹ßÀڴ µ¨ÆÄÀÌ ÀÚü Ä÷º¼Ç ¶óÀ̺귯¸®ÀÇ ºÒÆíÇÔÀ» ³Ê¹«³ª Àß ¾Ë¾Ò´Â µí ÇÏ´Ù. Spring4d °³¹ßÀڴ ¸ðµç Äڵ忡¼­ ÀÚµ¿Æı«¸¦ ¿°µÎ¿¡ µÎ°í ¸¸µç µí ÇÏ´Ù. µû¶ó¼­ Spring4d Ä÷º¼Ç ¶óÀ̺귯¸®´Â ±âº»ÀûÀ¸·Î ÀÚµ¿ Æı«¸¦ Áö¿øÇÒ »Ó´õ·¯, ÈξÀ´õ ´Ù¾çÇÑ ±â´ÉÀ» °¡Áø´Ù. Spring4dÀÇ ÀÚµ¿Æı«°¡ ¾ó¸¶³ª ÆíÇÑÁö ¾Ë¾Æº¸ÀÚ.

µ¨ÆÄÀ̷Π»õ·Î¿î ¾îÇÃÀ» Çϳª ¸¸µé°í ¸ÞÀÎÆûÀÇ implementation ¶óÀΠ¹Ø¿¡ ´ÙÀ½ ¶óÀÎÀ» ÀÛ¼ºÇÏÀÚ.

// Spring4d¿Í µ¨ÆÄÀÌ Áö³×¸¯ Ä÷º¼Ç ¶óÀ̺귯¸® À¯´Ö 
uses Spring.Collections, Generics.Collections;

type
  TMyObject = class
 // Áß·«
  end;

¸ÞÀÎÆûÀÇ OnCreate À̺¥Æ®¿¡ ´ÙÀ½ ¶óÀÎÀ» ±â¼úÇÏÀÚ. 

procedure TForm4.FormCreate(Sender: TObject);
begin
  ReportMemoryLeaksOnShutdown := True; // ¸Þ¸ð¸® ´©¼ö¸¦ Á¾·á½Ã º¸°íÇÏ°Ô ÇÔ 
end;

¸ÞÀÎÆû¿¡ ¹öÆ° µÎ°³¸¦ µÎ°í, °¢°¢ÀÇ OnClick À̺¥Æ®¿¡ µ¨ÆÄÀÌ ¹æ½Ä°ú Spring4d ¹æ½ÄÀ¸·Î list °´Ã¼¸¦ »ç¿ëÇϴ ¸Þ¼­µå¸¦ 2°³ ¸¸µç´Ù 

// Spring4d Ä÷º¼Ç ¹æ½Ä
procedure TForm4.Button1Click(Sender: TObject);
var
  list : IList<TMyObject>; // ±×·¸´Ù.. Spring4d´Â IList Áï ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ¿© ÀÚµ¿ Æı«ÇÑ´Ù
begin
  list := TCollections.CreateList<TMyObject>(true); // Àμö true°¡ ÀÚµ¿ Æı«¸¦ ¸í½ÃÇÔ, À̸¦ false·Î ÁÖ¸é ÀÚµ¿ Æı«¸¦ ¾ÈÇÔ
  list.Add(TMyObject.Create);
  list.Add(TMyObject.Create); 
end;

// µ¨ÆÄÀÌ Ä÷º¼Ç ¹æ½Ä
procedure TForm4.Button2Click(Sender: TObject);
var
  list: TList<TMyObject>;
begin
  list := TList<TMyObject>.Create;
  list.Add(TMyObject.Create);
  list.Add(TMyObject.Create);
end;

ÇÁ·Î±×·¥À» ½ÇÇàÇÑ ´ÙÀ½, µ¨ÆÄÀÌ ¹æ½Ä ¹öÆ°À» Å¬¸¯ÇÏ°í Á¾·áÇغ¸¶ó. ºÐ¸íÇÏ°Ô ¸Þ¸ð¸® ´©¼ö ¿¡·¯°¡ ¶ã °ÍÀÌ´Ù. ¹Ý¸é Spring4d ¹æ½Ä ¹öÆ°À» Å¬¸¯ÇÏ°í Á¾·áÇϸ頸޸𸮠´©¼ö ¿¡·¯°¡ ¶ßÁö ¾Ê´Â´Ù. À̸»ÀÎÁï µ¨ÆÄÀÌÀÇ TLIst<T>´Â list °´Ã¼¿Í ´õºÒ¾î list°¡ °¡Áö´Â ¿ä¼Ò °´Ã¼µéµµ ¸ðµÎ °³¹ßÀÚ°¡ ½º½º·Î ¾Ë¾Æ¼­ Æı«ÇØÁà¾ß ÇѴٴ °ÍÀÌ´Ù. À̴ ¸Å¿ì º¹ÀâÇÑ Äڵ带 °­¿äÇÑ´Ù. µû¶ó¼­ µ¨ÆÄÀÌ Ä÷º¼Ç List¸¦ »ç¿ëÇÒ¶§ ¿Ã¹Ù¸¥ ¹æ½ÄÀº ´ÙÀ½°ú °°´Ù. 

// ¿Ã¹Ù¸¥ µ¨ÆÄÀÌ Ä÷º¼Ç TList<T> »ç¿ë¹ý
var
  list: TList<TMyObject>;  
begin
  list := TList<TMyObject>.Create;
  list.Add(TMyObject.Create);
  list.Add(TMyObject.Create);
  
  // ¿ä¼Ò ¸ðÁ¶¸® Æı«
  while list.Count > 0 do begin
    list[0];.Free;
    list.Delete(0);
  end;
  
  //¸®½ºÆ® Æı«
  list.Free;
end;

Spring4d Ä÷º¼ÇÀº ÀÚµ¿ Æı«¸¦ Çϱ⠶§¹®¿¡ ÀüÇô Àú·± Ã»¼Ò¿ë Äڵ尡 ÇÊ¿ä¾ø´Ù. ¸¸ÀÏ list¿¡ ¿ä¼Ò¸¦ ¼ö½Ã·Î add, delete ÇÑ´Ù¸é, µ¨ÆÄÀÌ ¹æ½ÄÀº Á¤¸»·Î ¸Ó¸® ¾ÆÇÁ´Ù. »èÁ¦ÇÒ ¿ä¼Ò¿¡ ´ëÇؼ­ ÀÏÀÏÀÌ free ¸¦ È£ÃâÇØ Áà¾ß Çϱ⠶§¹®ÀÌ´Ù. ¹Ý¸é¿¡ Spring4d ¹æ½ÄÀº ¿ä¼Ò¸¦ »èÁ¦ÇÒ ¶§µµ ÀÚµ¿ Æı«¸¦ ÇÑ´Ù. 

Spring4d´Â List ¿Ü¿¡µµ ÈξÀ ´õ ´Ù¾çÇÑ Ä÷º¼Ç Å¸ÀÔÀ» Áö¿øÇÑ´Ù. ¶Ç ´õ ¸¹Àº Ä÷º¼Ç ¸Þ¼­µå¸¦ °¡Áø´Ù. ¿¹¸¦ µé¾î skip, skipwhile, all, any, foreach µîÀÌ´Ù. 

Spring4d Ä÷º¼Ç ListÀÇ °æ¿ì, ¸ðµç ¿ä¼Ò¿¡ ´ëÇØ ¾î¶² ÀÏ°ýÀûÀΠÀÛ¾÷À» ¼öÇàÇÏ°í ½Í´Ù¸é ±»ÀÌ for³ª while ¹Ýº¹¹® ´ë½Å¿¡ ´ÙÀ½°ú °°À̠ó¸®ÇÒ ¼ö ÀÖ´Ù.

  // list ¸ðµç ¿ä¼Ò¿¡ ´ëÇؼ­ À͸íÇÔ¼ö¸¦ °¢°¢ ½ÇÇà ½ÃŲ´Ù
  list.forEach( procedure(const obj:TMyObject)  begin
      // obj »ç¿ë
    end);

java ÇÁ·Î±×·¡¹ÖÀ» Çغ» »ç¶÷À̶ó¸é ÀÌ forEach ¸Þ¼­µå°¡ ¸Å¿ì ´«¿¡ ÀÍÀ» ¹ýÇÏ´Ù. 

Spring4d Ä÷º¼ÇÀº C#ÀÇ LINQ ºñ½ÁÇÑ ¹®¹ýÀ» Áö¿øÇϴµ¥, Take, Skip, SkipWhile µîÀÌ´Ù. ´ÙÀ½ ÄÚµå´Â Á¤¼ö ¿ä¼Ò¸¦ °¡Áö´Â ¸®½ºÆ®¸¦ ¸¸µé°í, ¼¼°³¸¦ °Ç³Ê¶Ù°í(skip), ¿ä¼ÒµéÀ» Ãâ·ÂÇϴ ÄÚµå´Ù. 

var
  list : IList<Integer>;
begin
  list := TCollections.CreateList<Integer>([1,2,3,4,5,6]);

  list.Skip(3).ForEach(procedure(const val:Integer)
    begin
      outputDebugstring(PChar(inttostr(val)) );
    end);

ÀÌ ¿Ü¿¡µµ ´Ù¾çÇÑ ±â´ÉµéÀÌ ¸¹´Ù. ISetÀÇ °æ¿ì Â÷ÁýÇÕ, ±³ÁýÇÕ, °øÁýÇÕ µîÀ» ±¸ÇÒ ¼ö ÀÖ´Ù. 

Spring.Collections À¯´ÖÀÇ TCollections Å¬·¡½º ¼±¾ðºÎ¸¦ º¸¸é ´ëÃ栾 Ä÷º¼Ç Å¸ÀÔÀ» Áö¿øÇÏ´ÂÁö, ±×¸®°í ¾î¶² Interface¸¦ »ç¿ëÇÏ´ÂÁö, °¢ ÀÎÅÍÆäÀ̽º´Â ¾î¶² ¸Þ¼­µå¸¦ °¡Áö´ÂÁö ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾Ë¼ö ÀÖ´Ù.