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¸¦ »ç¿ëÇÏ´ÂÁö, °¢ ÀÎÅÍÆäÀ̽º´Â ¾î¶² ¸Þ¼µå¸¦ °¡Áö´ÂÁö ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾Ë¼ö ÀÖ´Ù.
|