lecture Home > Professional Secrets

À¯¼ö¼®ÀÇ .NET °í±Þ±â¼ú Inside

   °­Á ÃÖÃÊ ÀÛ¼ºÀÏ : 2005³â 05¿ù 18ÀÏ
   °­Á ÃÖÁ¾ ¼öÁ¤ÀÏ : 2006³â 09¿ù 29ÀÏ

   °­Á ÀÐÀ½ ¼ö : ȸ

   ÀÛ¼ºÀÚ : Loner(À¯ °æ»ó)
   ÆíÁýÀÚ : Taeyo(±è Å¿µ)

   °­Á Á¦¸ñ : StringBuilder¿¡ ´ëÇÑ Áø½Ç ȤÀº °ÅÁþ¸» (2)

°­Á Àü Å¿ÀÀÇ Àâ´ã>

À¯¼ö¼®Àº ÇöÀç µå¿ø ¼ÒÇÁÆ®¿þ¾îÀÇ ¼ö¼® ÄÁ¼³ÅÏÆ®·Î ±Ù¹«ÇÏ°í °è½Ã¸ç, .NET ¾ÆÅ°ÅØÃ³ ¹× ÄÁ¼³ÆÃ°ú °ü·ÃÇÑ ÀÏÀ» Çϰí ÀÖ½À´Ï´Ù. °í¼öµé »çÀÌ¿¡¼­´Â ÀÌ¹Ì ¾Ë·ÁÁ® ÀÖ´Â À¯¸íÀÎÀ̸ç, Á¦°¡ ¾Æ´Â ÇÑ ±èÇö½Â(´å³Ý¿¢½ºÆÛÆ®)°ú ´õºÒ¾î ±¹³» .NET ±â¼úºÐ¾ßÀÇ ÃÖ°í °í¼ö·Î Æò°¡¹Þ°í ÀÖ´Â µÑ°°¡¶ó¸é ¼­·¯¿ö ÇÒ Àι°ÀÔ´Ï´Ù.
(ƯÀÌÇϰԵµ º»ÀÎÀº ¼­·¯¿öÇÏÁö ¾ÊÀ½. ÀÌ»óÇÏ°Ô ÁÖº¯ »ç¶÷µéÀÌ ´õ ¼­·¯¿öÇÔ)

Àå±â°£ÀÇ È¸À¯¿Í Ä¿ÇÇÁ¢´ë¸¦ °ÅÃÄ..

µåµð¾î, Àý´ë·Î!! ´Ù¸¥ »çÀÌÆ®³ª ºí·Î±×¿¡ ÆÛ°¨ÁúÀ» Çã¿ëÇÏÁö ¾Ê´Â ±×ºÐÀÇ ±ÛÀ» Å¿À »çÀÌÆ®¿¡¼­µµ ÇÔ²² Çϱâ·Î ÇÏ¿´½À´Ï´Ù. ½±°Ô ¾Ë¼ö ¾ø´Â °í±Þ½º·¯¿î ºñ¹ý °­ÁµéÀÌ À̾îÁø´Ù°í ±â´ëÇØµµ ÁÁ½À´Ï´Ù.

´õºÒ¾î, ÀÌ °­Á´ ¿ÜºÎ Æß ±ÝÁö ±ÛÀ̱⵵ ÇÕ´Ï´Ù
ÆäÀÌÁö ¸µÅ©´Â °¡´ÉÇϳª, ³»¿ë ÀÚü¸¦ ÆÛ°¡¼­ ÀÚ½ÅÀÇ ºí·Î±×¿¡ ¿Ã¸®´Â °ÍÀº ±ÝÁöÇϰí ÀÖ½À´Ï´Ù.
¾çÇØÇØ Áֽñ⠹ٶø´Ï´Ù.

Âü°í·Î, À¯¼ö¼®´ÔÀÇ ºí·Î±×´Â http://www.simpleisbest.net ÀÔ´Ï´Ù
ÇöÀç °­ÁÂÀÇ ¿øº» ±ÛÀÇ ¸µÅ©´Â http://www.simpleisbest.net/archive/2005/05/18/150.aspx ÀÔ´Ï´Ù.


Story about StringBuilder - (II)

StringBuilder ¸¸ÀÌ ¹®ÀÚ¿­ ¿¬»êÀÇ ´ë¼ö°¡ ¾Æ´Ï´Ù. ÇÊÀÚ´Â °ú°¨È÷ ¸»ÇÏ°í ½Í´Ù. StringBuilder¸¦ ¾²Áö ¸»ÀÚ. °¡´ÉÇÏ´Ù¸é...

Alternative String Operation

StringBuilder¸¦ ¾²Áö ¸»¶ó°í ÇßÀ¸´Ï ´Ù¸¥ ¹æ¹ýµµ ¾Ë·ÁÁà¾ß ÇÒ °Í ¾Æ´Ñ°¡... (÷ºÎÅÍ ±ä ±ÛÀ» ¾²´Ï ´ë·« ±ÍÂú´Ù) ¸¹Àº °æ¿ì, String.Concat ¸Þ½îµå¿Í String.Join ¸Þ½îµå´Â StringBuilder º¸´Ù È¿À²ÀûÀÌ´Ù. ƯÈ÷ ±× Å©±â°¡ 1KB ¹Ì¸¸À̶ó¸é ¾ÐµµÀûÀ¸·Î ÀÌµé ¸Þ½îµå°¡ StringBuilder¿¡ ºñÇØ È¿À²ÀûÀÌ¸ç ºü¸£´Ù. ´õ¿íÀÌ ¸ÚÁø °ÍÀº C#, VB.NET ÄÄÆÄÀÏ·¯°¡ ¹®ÀÚ¿­ÀÇ + ¿¬»êÀÚ¸¦ String.Concat ¸Þ½îµå È£Ãâ·Î ÄÄÆÄÀÏ ÇØÁشٴ °ÍÀÌ´Ù.

// ¿øº» ÄÚµå (C#)
string s1 = "aaaa";
string s2 = "bbb";
string s3 = s1 + s2;

// C# ÄÄÆÄÀÏ·¯°¡ »ý¼ºÇÑ ÄÚµå
string s1 = "aaaa";
string s2 = "bbb";
string s3 = String.Concat(s1, s2);

À§ Äڵ尡 ¾îµô ºÁ¼­ StringBuilder º¸´Ù È¿À²ÀûÀΰ¡´Â String.ConcatÀÇ ³»ºÎ¸¦ ±îºÁ¾ß ÇÑ´Ù. ÇÊÀÚ°¡ Reflector¸¦ ÅëÇØ ±îº» °á°ú, String.Concat ¸Þ½îµå´Â ¸Å°³º¯¼ö·Î ÁÖ¾îÁø µÎ ¹®ÀÚ¿­ÀÇ Å©±â¸¦ °è»êÇÏ¿©(À§ÀÇ °æ¿ì 7) ÇØ´ç Å©±âÀÇ ¹®ÀÚ¿­À» ÇÒ´çÇÏ°í ¾Õ¼­ ¾ð±ÞÇÑ FillString ¸Þ½îµå¸¦ 2ȸ È£ÃâÇÏ´Â °ÍÀÌ¿´´Ù. StringBuilder¸¦ »ç¿ëÇÏ´Â °æ¿ì, FillStringÀÌ 2ȸ È£ÃâµÈ´Ù´Â °ÍÀº µ¿ÀÏÇÏÁö¸¸ StringBuilder´Â ³»ºÎ ¹öÆÛ¸¦ À§ÇÑ ¹®ÀÚ¿­ ÇÒ´ç°ú ToString() È£Ã⠽ÿ¡ ¶Ç ¹®ÀÚ¿­ÀÌ ÇÒ´çµÇÁö¸¸ String.ConcatÀº ÃÖÁ¾ °á°ú ¹®ÀÚ¿­ ÇÑ °³¸¸ÀÌ ÇÒ´çµÈ´Ù.

String.ConcatÀº ´Ù¾çÇÑ ¸Þ½îµå Áߺ¹(±»ÀÌ Çѱ۷ΠÇÏÀÚ¸é Áߺ¹ Á¤µµ µÇ°Ú´Ù. method overload °¡ Á¤È®ÇÑ ¸íĪÀÌ´Ù. ´ë·« ÇѱÛÈ­´Â ¾î·Æ´Ù. -_-)À» °®°í ÀÖ´Ù.

      public static string Concat(params object[] args);
      public static string Concat(params string[] values);
      public static string Concat(object arg0);
      public static string Concat(object arg0, object arg1);
      public static string Concat(string str0, string str1);
      public static string Concat(object arg0, object arg1, object arg2);
      public static string Concat(string str0, string str1, string str2);
      public static string Concat(object arg0, object arg1, object arg2, object arg3, __arglist);
      public static string Concat(string str0, string str1, string str2, string str3);

C#, VB.NET ÄÄÆÄÀÏ·¯´Â ÃæºÐÈ÷ ¿µ¸®Çؼ­ 4°³±îÁöÀÇ ¹®ÀÚ¿­ + ¿¬»ê¿¡ ´ëÇØ¼­´Â String.ConcatÀ» È£ÃâÇϵµ·Ï ¸¸µç´Ù´Â ¾ê±âÀÌ´Ù. Áï, s = a + b + c + d ¶ó´Â Äڵ尡 ÁÖ¾îÁö¸é ÄÄÆÄÀÏ·¯´Â s = String.Concat(a, b, c, d) ¶ó´Â Äڵ带 »ý¼ºÇØ ³½´Ù. °á±¹ 4°³ÀÇ ¹®ÀÚ¿­À» ¿¬°áÇϴµ¥ ÃÖÁ¾ °á°ú¹°·Î ÇÑ °³ÀÇ ¹®ÀÚ¿­¸¸ÀÌ »ý¼ºµÈ´Ù´Â ¾ê±â°¡ µÇ°Ú´Ù. 5°³ ÀÌ»óÀÇ ¹®ÀÚ¿­¿¡ ´ëÇØ¼­ + ¿¬»êÀÌ ¼öÇàµÇ¸é ¿¬»ê¿¡ Âü¿©ÇÑ ¹®ÀÚ¿­µéÀ» ¹®ÀÚ¿­ ¹è¿­·Î ¸¸µé°í String.Concat(params string[] values) °¡ È£ÃâµÈ´Ù. ÀÌ ¸Þ½îµå ¿ª½Ã ÃÖÁ¾ °á°ú¹°·Î ÇÑ °³ÀÇ ¹®ÀÚ¿­¸¸ÀÌ »ý¼ºµÈ´Ù.

ÇÊÀÚ°¡ ¸»ÇϰíÀÚ ÇÏ´Â ¿äÁö´Â String.ConcatÀº ÃæºÐÈ÷ È¿À²ÀûÀÌ¸ç ±× ¼º´É ¶ÇÇÑ ºü¸£´Ù´Â °ÍÀ̸ç + ¿¬»êÀÚ¸¦ »ç¿ëÇϸé ÄÚµåÀÇ °¡µ¶¼º(readability) ¿ª½Ã Çâ»óµÈ´Ù°í ¸»ÇÒ ¼ö ÀÖ´Ù(Append È£ÃâÀÌ ´õ Àбâ ÁÁ´Ù¸é ¸»°í...). ±»ÀÌ StringBuilder¸¦ ¾²Áö ¾Ê´õ¶óµµ ¿øÇÏ´Â È¿°ú¸¦ ÃæºÐÈ÷ ³¾ ¼ö ÀÖ´Ù. 3-4°³ÀÇ ¹®ÀÚ¿­À» ¿¬°áÇÏ´Â °æ¿ì¿¡ StringBuilder¸¦ ¾²´Â °ÍÀÌ ¿ÀÈ÷·Á ºñ È¿À²ÀûÀÎ °ÍÀÌ µÇ¾î ¹ö¸°´Ù.

StringBuilder ´ë½Å + ¿¬»êÀÚ°¡ ÁÁÀº ¿¹¸¦ Çϳª ´õ µé¾îº¸ÀÚ. ´ÙÀ½ ÄÚµå´Â DB¸¦ ¾×¼¼½ºÇÏ´Â ÇÁ·Î±×·¥µé¿¡¼­ ÈçÈ÷ º¼ ¼ö ÀÖ´Â ÄÚµå·Î StringBuilder¸¦ »ç¿ëÇØ SQL ¹®ÀåÀ» ¸¸µå´Â ÄÚµåÀÌ´Ù. ÀÌ Äڵ尡 ¿À´ÃÀÇ ÃÖ°íÀÇ »ðÁú Äڵ尡 µÇ°Ú´Ù.

// ¿À´ÃÀÇ »ðÁú ÄÚµå ...
StringBuilder sb = new StringBuilder();
sb.Append("SELECT ProductID as 'Á¦Ç°¾ÆÀ̵ð', ");
sb.Append("       ProductName as 'Á¦Ç°¸í', ");
sb.Append("       UnitPrice as '´Ü°¡' ");
sb.Append("FROM Products ");
sb.Append("WHERE UnitPrice IS NOT NULL");
string query = sb.ToString();
// ÀÌÇÏ ADO.NET ÄÚµå (»ý·«)

À§ Äڵ尡 ¿Ö »ðÁúÀΰ¡? ºñ·Ï StringBuilder¿¡ ¸í½ÃÀûÀ¸·Î capacity¸¦ ÁÖÁö ¾Ê¾Ò´ÙÁö¸¸ À̰ÍÀÌ »ðÁú Á¤µµ±îÁö?

±×·¸´Ù. »ðÁúÀÌ´Ù.

´å³Ý ÄÄÆÄÀÏ·¯µé(ÃÖ¼ÒÇÑ C#, VB.NET ÄÄÆÄÀÏ·¯)Àº ²Ï³ª ¿µ¸®ÇÏ´Ù. ¹®ÀÚ¿­ »ó¼ö°¡ + ¿¬»êÀÚ·Î ¿¬°áµÇ¸é String.Concat À» È£ÃâÁ¶Â÷ ÇÏÁö ¾Ê°í ÄÄÆÄÀÏ Å¸ÀÓ¿¡ ¹®ÀÚ¿­À» ¿¬°áÇÏ°í ±× °á°ú¹°¿¡ ´ëÇØ Äڵ带 »ý¼ºÇÑ´Ù. ¸»·Î¸¸ Çϸé ÇÞ°¥¸®´Ï ¿¹Á¦¸¦ º¸ÀÚ.

// ¿øº» ¼Ò½º (C#) ÄÚµå
string query = "SELECT ProductID as 'Á¦Ç°¾ÆÀ̵ð', " +
               "       ProductName as 'Á¦Ç°¸í', " +
               "       UnitPrice as '´Ü°¡' " +
               "FROM Products " +
               "WHERE UnitPrice IS NOT NULL";

À§ ÄÚµå´Â ¾Õ¼­ StringBuilder ¿¹Á¦¸¦ + ¿¬»êÀÚ ¹öÀüÀ¸·Î ¹Ù²Û °ÍÀÌ´Ù. À§ ÄÚµåÀÇ Æ¯Â¡Àº ¸ðµÎ ¹®ÀÚ¿­ »ó¼ö(¹®ÀÚ¿­ ¸®ÅÍ·²)·Î¸¸ + ¿¬»êÀÌ ±¸¼ºµÇ¾ú´Ù´Â Á¡ÀÌ´Ù. À̶§ C# ÄÄÆÄÀÏ·¯´Â String.Concat È£Ãâ·Î ÀÌµé ¹®ÀÚ¿­À» ¿¬°áÇÏ´Â Äڵ带 »ý¼ºÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏ·¯°¡ ¹®ÀÚ¿­À» ÄÄÆÄÀÏ Å¸ÀÓ¿¡ ¿¬°áÇÏ°í ¿¬°áµÈ ¹®ÀÚ¿­À» °¡Áö°í Äڵ带 »ý¼ºÇØ ³½´Ù´Â °ÍÀÌ´Ù.

// ÄÄÆÄÀÏµÈ °á°ú ÄÚµå
string query = "SELECT ProductID as 'Á¦Ç°¾ÆÀ̵ð',        ProductName as 'Á¦Ç°¸í',        UnitPrice as '´Ü°¡' FROM Products WHERE UnitPrice IS NOT NULL";

¹°·Ð ¹®ÀÚ¿­Àº ´Þ¶û Çϳª¸¸ÀÌ »ç¿ëµÈ´Ù. ÀÌÁ¦ ¿Ö StringBuilder ¹öÀüÀÇ Äڵ尡 »ðÁúÀÌ µÇ¾ú´Â°¡°¡ ÀÌÇØ°¡ µÉ °ÍÀÌ´Ù. ¶ß²ûÇÑ µ¶ÀÚµéÀÌ ²Ï ÀÖÀ¸¸®¶ó »ý°¢µÈ´Ù. ´å³Ý ÄÄÆÄÀÏ·¯µéÀº ¹®ÀÚ¿­ + ¿¬»ê¿¡¼­ ÀÎÁ¢ÇÑ ¹®ÀÚ¿­ÀÌ ¸®ÅÍ·²À̶ó¸é ÄÄÆÄÀÏ Å¸ÀÓ¿¡ ¹®ÀÚ¿­À» ¿¬°áÇØ ¹ö¸°´Ù. ¹°·Ð + ¿¬»êÀÚÀÇ ÇÇ¿¬»êÀÚ(operand)°¡ º¯¼ö¶ó¸é String.Concat È£ÃâÀÌ »ç¿ëµÈ´Ù.

// ¿øº» ÄÚµå (C#)
string s1 = "aaaa" + "bbbb";
string s2 = s1 + "cccc" + "dddd";

// C# ÄÄÆÄÀÏ·¯°¡ »ý¼ºÇÑ ÄÚµå
string s1 = "aaaabbbb";
string s2 = s1 + "ccccdddd";

+ ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© ¹®ÀÚ¿­À» ´õÇÏ´Â ¿¬»êÀº ¸¹Àº °æ¿ì StringBuilderº¸´Ù È¿À²ÀûÀÌ´Ù. ´Ù¸¸ ´ÙÀ½°ú °°ÀÌ ¹Ýº¹¹® ¾È¿¡¼­ + ¿¬»êÀÚ°¡ »ç¿ëµÇ´Â °æ¿ì´Â StringBuilder°¡ È¿À²ÀûÀÏ ¼ö ¹Û¿¡ ¾ø´Ù.

// ¿øº» ÄÚµå (C#)
string s = null;
for(int i = 0; i < 50; i++) {
    s = s + i.ToString() + ",";
}

À§ ÄÚµå´Â ¸í¹éÈ÷ 50ȸ ÀÌ»óÀÇ String.ConcatÀÌ È£ÃâµÇ°í ÃÖÁ¾ÀûÀ¸·Î ¿øÇÏ´Â ¹®ÀÚ¿­À» ¾ò±â À§ÇØ Áß°£ ´Ü°è¿¡ 49°³ÀÇ Àӽà ¹®ÀÚ¿­ÀÌ »ç¿ëµÇ¾ú´Ù°¡ »ç¶óÁø´Ù. ÀÌ °æ¿ì¿¡´Â StringBuilder°¡ ¿ùµîÈ÷ È¿À²ÀûÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù. ÇÊÀÚÀÇ °æÇè»ó À§¿Í °°Àº Äڵ尡 ÇÊ¿äÇÑ °æ¿ì°¡ ±×´ÙÁö ¸¹Áö ¾Ê¾Ò´Ù. µ¶ÀÚµéÀº ¾î¶²°¡?

Summary

Áö±Ý±îÁö À̾߱â(StringBuilder¿¡ ´ëÇÑ ¾Õ¼­ÀÇ Æ÷½ºÆ® ù¹øÂ° Æ÷ÇÔ)¸¦ ¿ä¾àÇØ º¸ÀÚ. ¸¹Àº ´å³Ý ÀÔ¹®¼­¿Í ¿Â¶óÀÎ ±Û¿¡¼­ ¸»ÇÏ´Â StringBuilder¸¦ »ç¿ëÇ϶ó´Â ±Ç°í¸¦ ¸Í¸ñÀûÀ¸·Î µû¸£´Â °ÍÀº »ðÁúÀÌ µÉ ¼ö ÀÖ´Ù. ±×·¸´Ù°í ÀÌµé ±ÛµéÀÌ ¸ðµÎ ±¸¶ó¸¦ ÃÆ´Ù´Â ¾ê±â´Â ¾Æ´Ï´Ù. Ã¥À» Á¤È®È÷ ´Ù½Ã ÀÐ¾î º¸¸é ¹®ÀÚ¿­ + ¿¬»êÀÇ ¹®Á¦¸¦ ÁöÀûÇϰí À̰ÍÀ» ÇØ°áÇϰíÀÚ ÇÒ ¶§¿¡ StringBuilder¸¦ ¾²¶ó°í µÇ¾î ÀÖÀ» °ÍÀÌ´Ù. ÀÌ·¸°Ô ¾ê±â ÇÏÁö ¾Ê°í ¹«Á¶°Ç StringBuilder¸¦ ¾²¶ó°í µÈ ¹®ÇåÀÌ ÀÖ´Ù¸é ´ë·« ³­°¨ÇÑ »óȲÀÌ µÇ°Ú´Ù. µ¶ÀÚµéÀÌ ¾Ë¾Æ¼­ ÇØ¶ó...

¹®ÀÚ¿­ + ¿¬»êÀº String.Concat È£Ãâ·Î º¯È¯µÇ°í 4°³ ÀÌÇÏÀÇ ¹®ÀÚ¿­ + ¿¬»êÀº ¾ÐµµÀûÀ¸·Î + ¿¬»êÀÌ È¿À²ÀûÀÌ¸ç ºü¸£´Ù. ´Ù¸¥ ºí·Î±×¸¦ ÅëÇØ ÁöÀûÇÒ °ÍÀÌÁö¸¸, ÀÛÀº ¹®ÀÚ¿­ 400¿© °³¸¦ ¿¬°áÇÏ´Â ÀÛ¾÷ ¿ª½Ã String.Concat°ú StringBuilderÀÇ ¼º´ÉÂ÷ÀÌ´Â ±×´ÙÁö Å©Áö ¾Ê´Ù. StringBuilder¸¦ »ç¿ëÇϸ鼭 À¯ÀÇÇÒ »çÇ×µéÀº ´ÙÀ½°ú °°´Ù.

  • StringBuilder´Â ¹èºÎ ¹®ÀÚ¿­ ¹öÆÛ¸¦ À¯ÁöÇÏ¸ç ±× Ãʱ⠰ªÀº 16ÀÌ´Ù.
  • StringBuilder´Â ³»ºÎ ¹öÆÛ°¡ ºÎÁ·ÇÏ°Ô µÇ¸é »õ·Î¿î ³»ºÎ ¹öÆÛ¸¦ ÇÒ´çÇÏ¸ç ±âÁ¸ ¹öÆÛÀÇ ³»¿ëÀ» º¹»çÇÏ´Â ¿À¹öÇìµå¸¦ °®´Â´Ù.
  • StringBuilder.ToString()Àº ¹®ÀÚ¿­À» »õ·ÎÀÌ »ý¼ºÇÏ¿© ¹ÝȯÇϹǷΠ¶Ç ´Ù¸¥ ¿À¹öÇìµå¸¦ À¯¹ßÇÒ ¼öµµ ÀÖ´Ù.

¶ÇÇÑ ´å³Ý ÄÄÆÄÀÏ·¯µéÀº ¶ÇÇÑ ¹®ÀÚ¿­ »ó¼ö°¡ + ¿¬»êÀÚ¿¡ ÀÇÇØ ¿¬°áµÇ´Â °æ¿ì, ¹®ÀÚ¿­ ¿¬°áÀ» ÄÄÆÄÀÏ Å¸ÀÓ¿¡ ¼öÇàÇϹǷΠ¹®ÀÚ¿­ + ¿¬»êÀº ´õ ÀÌ»ó ±âÇÇÇÒ °ÍÀÌ ¾Æ´Ï¶ó´Â °ÍÀÌ´Ù.

Epilogue

ù ±Û(¾¾¸®Áî)À» À̵û±¸·Î ±æ°Ô ¾²ÀÚ´Ï ¹«Àð°Ô ºý½Ã´Ù. ´ãºÎÅÏ Âª°Ô ª°Ô ¿©·¯ ¹ø ¿Ã·Á¾ß°Ú´Ù°í ´ÙÁüÇØ º»´Ù. ÀÌ°Ç ºí·Î±×°¡ ¾Æ´Ï¶ó... ³ë°¡´Ù´Ù...


ÇØ´ç ±Û°ú °ü·ÃÇÏ¿© ¿Ã¶ó¿Â Áú/´ä Áß ºÁµÑ¸¸ÇÑ ³»¿ë
Áú¹®
for (int i = 0;i < ds.Tables[0].Rows.Count;i++)
{
tmpHtml += "<tr>"
+" <td>" + ds.Tables[0].Rows[i]["AgreementID"].ToString() + " </td>"
+" <td>" + ds.Tables[0].Rows[i]["GSBNSystem"].ToString() + "</td> "
+" <td>" + ds.Tables[0].Rows[i]["DateCreated"].ToString() + "</td> "
+"</tr>";
}

for (int i = 0;i < ds.Tables[0].Rows.Count;i++)
{
sb.Append("<tr>");
sb.Append(" <td>" + ds.Tables[0].Rows[i]["AgreementID"].ToString() + "</td> ");
sb.Append(" <td>" + ds.Tables[0].Rows[i]["GSBNSystem"].ToString() + "</td> ");
sb.Append(" <td>" + ds.Tables[0].Rows[i]["DateCreated"].ToString() + "</td> ");
sb.Append("</tr>");
}

ÁÖÀÎÀå²²¼­ ¸»¾¸ÇϽаÍÀÌ À§ÀÇ for¹®À» ¾Æ·¡ for¹®À¸·Î ¹Ù²Ù´Â °ÍÀÌ ÁÁ´Ù´Â ÀǵµÀΰ¡¿ä?
±×·±µ¥ ¾Æ·¡¿¡ AppendÇÏ´Â °Íµµ ¸®ÅÍ·² ¹®ÀÚ¿­ÀÌ µÇ´Â °Ç ¾Æ´ÑÁö Á» Çò°¥¸®³×¿ä.
stringº¯¼ö¸¦ ¼±¾ðÇϰí for¹®¾È¿¡¼­ ´ëÀÔ ÇÑ ÈÄ ±×°ÍÀ» AppendÇØ¾ß ¸Â´Â °Ç°¡¿ä?
´äº¯ ºÎʵå·Á¿ä....
´äº¯ :
¿¹Á¦·Î ÁֽŠÄڵ常À» º¸°í ÆÇ´ÜÇÏ¸é ¾Æ·¡ Äڵ尡 ÈξÀ ´õ È¿À²ÀûÀ¸·Î º¸ÀÔ´Ï´Ù.
À§ÂÊ ÄÚµå´Â for ¹Ýº¹¹® ¾È¿¡¼­ ¸Å¹ø »õ·Î¿î ¹®ÀÚ¿­À» ¸¸µé¾î(+= ¿¬»êÀÚ¿¡ ÀÇÇØ) ³»°í
¶ÇÇÑ 4°³ ÀÌ»óÀÇ ¹®ÀÚ¿­À» ¿¬°á(concat) Çϱ⠶§¹®¿¡
¹è¿­ °´Ã¼µµ »ý¼ºµË´Ï´Ù. ÇÏÁö¸¸ ¾Æ·¡ÂÊ ÄÚµå StringBuilder¸¦ ÀÌ¿ëÇϹǷΠÀÌ·¯ÇÑ ºñÈ¿À²Àº ¾ø½À´Ï´Ù.

¾Æ·¡ÂÊ Äڵ忡¼­ ds.Tables[0].Rows[i]["xxxx"].ToString() Àº ¸®ÅÍ·²ÀÌ ¾Æ´Õ´Ï´Ù.
µû¶ó¼­ ·±Å¸ÀÓ¿¡ "<td>", "</td>" ¸®ÅÍ·²°ú Concat ¿¬»êÀÌ ¼öÇàµË´Ï´Ù. ÀÌ·± ÀÌÀ¯¿¡¼­ º¸´Ù Äڵ带 ÃÖÀûÈ­ ½ÃÄѺ»´Ù¸é

sb.Append("<tr><td>");
sb.Append(ds.Tables[0].Rows[i]["AgreementID"].ToString());
sb.Append("</td><td>")
sb.Append(ds.Tables[0].Rows[i]["GSBNSystem"].ToString());

ÀÌ·± ½ÄÀ¸·Î ÇÏ´Â °ÍÀÌ ºÒÇÊ¿äÇÑ ¹®ÀÚ¿­ »ý¼ºÀ» ÁÙÀÌ´Â °ÍÀ̶ó ÆÇ´ÜµË´Ï´Ù.

¸¶Áö¸·À¸·Î StringBuilder¿¡¼­ ¹öÆÛ¸¦ ´ÃÀÌ´Â ÀÛ¾÷À» ÃÖ¼ÒÈ­ ½Ã۱â À§ÇØ StringBuilder »ý¼º½Ã
ÀûÀýÇÑ Å©±â¸¦ ÁÖ¸é ´õ ÁÁÀ» µí ½Í½À´Ï´Ù.

»ç½Ç ÀÌ·¸°Ô Äڵ带 ½Å°æ½á ÁÖ¸é ÁÁÁö¸¸ Àú·¸°Ô ±îÁö ½Å°æ½á Áà¾ß ÇÒ À¥ »çÀÌÆ®´Â ±×´ÙÁö ¸¹Áö ¾Ê½À´Ï´Ù.
Çѽ𣿡 ¼ö½Ê¸¸¸íÀÌ ¿À°í°¡´Â »çÀÌÆ®°¡ ¾Æ´Ï¶ó¸é ¾Æ·¡ÂÊ ÄÚµå Á¤µµ·Î Äڵ带 ÇØÁ൵ ¹«¹æÇÒ µí ½Í³×¿ä.

 

°­Á ¸ñ·ÏÀ¸·Î..