lecture Home > Professional Secrets

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

   °­Á ÃÖÃÊ ÀÛ¼ºÀÏ : 2005³â 06¿ù 08ÀÏ
   °­Á ÃÖÁ¾ ¼öÁ¤ÀÏ : 2006³â 10¿ù 25ÀÏ

   °­Á ÀÐÀ½ ¼ö : ȸ

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

   °­Á Á¦¸ñ : ¹®ÀÚ¿­ À̾߱â 3 : String Compare

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

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

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

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

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

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


¹®ÀÚ¿­ ÀÌ¾ß±â ³× ¹øÂ° ÀÔ´Ï´Ù. ¹®ÀÚ¿­ ºñ±³¿¡ ´ëÇØ¼­ ¸îÀÚ ²ôÀû¿© ºÃ½À´Ï´Ù. Àç¹Õ°Ô ±Û ¾²±â°¡ Á¤¸» ¾î·Æ³×¿ä. ¾î¶»°Ô ¸îÀÚ Àû¾î ³»·Á°¡´Ùº¸¸é ¾î´À»õ µüµüÇØÁ® ÀÖ´Â ±ÛÀ» º¸¸é ÇѼûÀÌ ³ª¿É´Ï´Ù. µýÁö ÀϺ¸ ¿¬±¸¸¦ Á» ÇØºÁ¾ß ÇÒ µí Çϳ׿ä.

About String Compare...

¹®ÀÚ¿­À» ¼­·Î ºñ±³ÇÏ´Â ¹®ÀÚ¿­ ºñ±³´Â »ó´çÈ÷ ÀÚÁÖ ¼öÇàÇÏ´Â ¹®ÀÚ¿­ ¿¬»ê Áß ÇϳªÀÌ´Ù. ´å³ÝÀÇ ¹®ÀÚ¿­Àº value-type ÀÌ ¾Æ´Ñ reference-type À̹ǷΠºñ±³¸¦ ÇÒ ¶§ ¾à°£ÀÇ ÁÖÀǸ¦ ±â¿ï¿©¾ß ÇÑ´Ù. ´ë°³ÀÇ °æ¿ì ±×³É ºñ±³¸¦ Çϸé Å« ¹®Á¦°¡ ¾øÁö¸¸ ±×·¸Áö ¾ÊÀº °æ¿ìµµ Àֱ⠶§¹®ÀÌ´Ù. À̹ø ¹®ÀÚ¿­ À̾߱⠾¾¸®Áî´Â ¹®ÀÚ¿­ ºñ±³¿¡ ´ëÇØ¼­ °£´ÜÈ÷ ¸î ¸¶µð ÇØº¸°í ¹®ÀÚ¿­ ºñ±³¿¡ °ü·ÃµÈ ÆÁÀ» Çϳª ¼Ò°³ÇϰíÀÚ ÇÑ´Ù.

´Ù½Ã Çѹø ¸»ÇÑ´Ù. ´å³ÝÀÇ ¹®ÀÚ¿­Àº ÂüÁ¶Çü(reference-type)ÀÌ´Ù. ÀÌ·± ÀüÂ÷·Î ¾î¸° String Ŭ·¡½º´Â Equals À̶õ ¸Þ½îµå¸¦ Á¦°øÇÑ´Ù. ÀÌ ¸Þ½îµå´Â ¹®ÀÚ¿­ ÂüÁ¶ ºñ±³¸¦ ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ÀϹÝÀûÀ¸·Î »ý°¢ÇÏ´Â ¹®ÀÚ¿­ ºñ±³¸¦ ¼öÇàÇØÁØ´Ù(³Ê¹« ´ç¿¬ÇѰ¡ ? -_-). ´ÙÀ½ Äڵ带 º¸ÀÚ.

string s1 = "aaa";
string s2 = String.Concat("aa", "a");
Console.WriteLine("Reference Compare : s1 = s2 ? {0}", Object.ReferenceEquals(s1, s2));
Console.WriteLine("String Compare : s1 = s2 ? {0}", s1.Equals(s2));

¼öÇà °á°ú :
Reference Compare : s1 = s2 ? False
String Compare : s1 = s2 ? True

À§ ÄÚµå´Â ÂüÁ¶Çü ºñ±³¿Í ÀÏ¹Ý ¹®ÀÚ¿­ ºñ±³¸¦ Àß º¸¿©ÁÖ°í ÀÖ´Ù. s2 º¯¼ö°¡ ÂüÁ¶ÇÏ´Â ¹®ÀÚ¿­Àº Concat ¸Þ½îµå È£Ãâ¿¡ ÀÇÇØ »õ·ÎÀÌ »ý¼ºµÈ ¹®ÀÚ¿­ °´Ã¼ÀÌ´Ù. µû¶ó¼­ s1°úÀÇ ÂüÁ¶ ºñ±³(ReferenceEquals ¸Þ½îµå)¸¦ ¼öÇàÇÏ¸é °°Áö ¾Ê´Ù´Â °á°ú°¡ ³ª¿Â´Ù. ¹Ý¸é Equals ¸Þ½îµå¿¡ ÀÇÇÑ ºñ±³´Â ÂüÁ¶ ºñ±³°¡ ¾Æ´Ñ ¹®ÀÚ¿­ ºñ±³À̹ǷΠs1, s2ÀÇ ºñ±³´Â µ¿ÀÏÇÑ °ÍÀ¸·Î °á°ú°¡ ³ª¿Â´Ù.

Equality Operators

ÀϹÝÀûÀÎ ´å³Ý ÇÁ·Î±×·¡¹Ö¿¡¼­ ¹®ÀÚ¿­À» ºñ±³ÇÒ ¶§, Equals ¸Þ½îµå³ª ReferenceEquals ¸Þ½îµå¸¦ »ç¿ëÇÏ´Â °æ¿ì´Â º°·Î ¾ø´Ù°í º»´Ù. ´ëºÎºÐ ÇÁ·Î±×·¡¹Ö ¾ð¾î(C#, VB.NET µî)¿¡¼­ Á¦°øÇÏ´Â µ¿µî ¿¬»êÀÚ(Equality Operators)¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù. C#, Managed C++ÀÇ °æ¿ì¿¡´Â == ¿¬»êÀÚ¸¦ VB.NETÀÇ °æ¿ì´Â = ¿¬»êÀÚ¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù.

C#ÀÇ °æ¿ì ¹®ÀÚ¿­¿¡ == ¿¬»êÀÚ°¡ »ç¿ëµÇ¸é String Ŭ·¡½º¿¡ Á¤ÀÇµÈ ¿¬»êÀÚ ¿À¹ö·Îµå ¸Þ½îµåÀÎ op_Equality ¸Þ½îµå°¡ È£ÃâµÇ°Ô µÇ¾î ÀÖ´Ù. ±×¸®°í ÀÌ ¸Þ½îµå´Â ´Ù½Ã Equals ¸Þ½îµå¸¦ È£ÃâÇÑ´Ù. µû¶ó¼­ C#¿¡¼­ ¹®ÀÚ¿­¿¡ ´ëÇØ == ¿¬»êÀÚ¸¦ »ç¿ëÇϸé ÂüÁ¶ ºñ±³°¡ ¾Æ´Ñ ¹®ÀÚ¿­ ºñ±³¸¦ ¼öÇàÇÏ´Â °ÍÀÌ´Ù.

¹Ý¸é Managed C++´Â == ¿¬»êÀÚ´Â ´Ü¼øÇÑ ÂüÁ¶ ºñ±³ÀÌ´Ù. ´©°¡ C++ ¾Æ´Ï¶ö±îºÁ ReferenceEquals ¸¶Àú È£ÃâÇÏÁö ¾Ê°í ÂüÁ¶°ª, Áï Æ÷ÀÎÅ͸¦ ºñ±³ÇØ ¹ö¸°´Ù. µû¶ó¼­ Managed C++¿¡¼­ ÂüÁ¶ ºñ±³°¡ ¾Æ´Ñ ¹®ÀÚ¿­ ºñ±³¸¦ Çϱâ À§Çؼ­´Â ¸í½ÃÀûÀ¸·Î Equals ¸Þ½îµå¸¦ È£ÃâÇØ ÁÖ¾î¾ß ÇÑ´Ù.

VB.NETÀº C#°ú µ¿ÀÏÇÏ°Ô = ¿¬»êÀÚ°¡ »ç¿ëµÇ¸é ¹®ÀÚ¿­ ºñ±³¸¦ ¼öÇàÇÑ´Ù. ´Ù¸¥ Á¡Àº String Ŭ·¡½º¿¡ Á¤ÀÇµÈ ¿¬»êÀÚ ¿À¹ö·Îµå ¸Þ½îµå°¡ ¾Æ´Ñ VB.NET ¸¸ÀÇ ·±Å¸ÀÓ ¶óÀ̺귯¸®ÀÎ Microsoft.VisualBasic.dll ³»¿¡ Æ÷ÇÔµÈ StringType Ŭ·¡½ºÀÇ ¹®ÀÚ¿­ ºñ±³ ¸Þ½îµå(StrCmp ¸Þ¼Òµå)¸¦ È£ÃâÇϵµ·Ï µÇ¾î ÀÖ°í ÀÌ ¸Þ½îµå ³»¿¡¼­ ´Ù½Ã String.CompareOrdinal ¸Þ½îµå¸¦ È£ÃâÇϵµ·Ï µÇ¾î ÀÖ´Ù. ¿Ö ÀÌ·¸°Ô µÇ¾î Àִ°¡´Â ÇÊÀÚµµ È®½ÇÇÏÁö ¾Ê´Ù. ´ëÃæ ÀÌÀü VB ¾ð¾î¿ÍÀÇ È£È¯¼º Ãø¸é ¶§¹®ÀÌ ¾Æ´Ò±î ½Í´Ù. (VB.NETÀº ´ë·«... ¾Æ¿õ~)

Âü°í·Î ¹®ÀÚ¿­ ºñ±³°¡ ¾Æ´Ñ ÂüÁ¶ ºñ±³¸¦ ÇÏ°í ½Í´Ù¸é ¾ð¾î¿¡ ¹«°üÇÏ°Ô Object.ReferenceEquals ¸Þ½îµå¸¦ È£ÃâÇÏ¸é µÈ´Ù.

Tip about String Compare

¹®ÀÚ¿­ ºñ±³¿¡¼­ ÆÁ Çϳª¸¦ ¼Ò°³ÇϰíÀÚ ÇÑ´Ù. ¹®ÀÚ¿­À» ºñ±³ÇÒ ¶§ È¿À²¼ºÀ» °í·ÁÇØ¾ß ÇÒ °ÍÀÌ ÇѵΠ°¡Áö°¡ ¾Æ´Ò °ÍÀÌÁö¸¸ ÈçÈ÷ Áö³ªÄ¡´Â °Í Áß Çϳª°¡ ´ë¼Ò¹®ÀÚ ±¸º° ¾øÀÌ ºñ±³¸¦ ÇÏ´Â °æ¿ìÀÌ´Ù. ±âº»ÀûÀ¸·Î String.Equals ¸Þ¼Òµå´Â ´ë¼Ò¹®ÀÚ¸¦ ±¸º°ÇÏ¿© ºñ±³¸¦ ¼öÇàÇÑ´Ù. ±×¸®°í VB.NET ¿¡¼­ = ¿¬»êÀÚ¸¦ ÀÌ¿ëÇÏ¿© ¹®ÀÚ¿­ ºñ±³¸¦ ÇÏ´Â °æ¿ìµµ ¸¶Âù°¡Áö´Ù. ÀÌ ¶§¹®¿¡ ´ë¼Ò¹®ÀÚ¿¡ °ü°è ¾øÀÌ ¹®ÀÚ¿­À» ºñ±³ÇϰíÀÚ ÇÒ ¶§ ÈçÈ÷ »ç¿ëÇÏ´Â ¹æ¹ýÀº ºñ±³ ´ë»óÀ» ¸ðµÎ ´ë¹®ÀÚ·Î ¹Ù²Ù°Å³ª ¸ðµÎ ¼Ò¹®ÀÚ·Î ¹Ù²Ù¾î ºñ±³Çϰï ÇÑ´Ù.

// ´ë¼Ò¹®ÀÚ¿¡ °ü°è¾ø´Â ¹®ÀÚ¿­ ºñ±³ C# ÄÚµå ¿¹Á¦
if (s1.ToUpper() == s2.ToUpper()) {
    // µ¿ÀÏÇÑ ¹®ÀÚ¿­
}
else {
    // µ¿ÀÏÇÏÁö ¾ÊÀº ¹®ÀÚ¿­
}

À§ ÄÚµå´Â Àß ÀÛµ¿ÇÏÁö¸¸ È¿À²ÀûÀ̶ó°í º¼ ¼ö ¾ø´Ù. ¿Ö³Ä¸é ToUpper() ¸Þ½îµå È£ÃâÀº ´ë¹®ÀÚ·Î º¯°æµÈ »õ·Î¿î ¹®ÀÚ¿­ °´Ã¼¸¦ ¹ÝȯÇÑ´Ù´Â Á¡ÀÌ´Ù. ¹®ÀÚ¿­Àº º¯°æµÇÁö ¾Ê´Â immutable ÀÓÀ»  ÀØÁö ¸»ÀÚ. µû¶ó¼­ À§ ÄÚµå´Â ºÒÇÊ¿äÇÏ°Ô ¹®ÀÚ¿­ °´Ã¼ 2°³¸¦ ¸¸µé¾î ³»¸ç ÀÌ ¹®ÀÚ¿­ °´Ã¼´Â °ð¹Ù·Î GC ÀÇ ´ë»óÀÌ µÇ´Â ¾²·¹±â·Î Àü¶ôÇÑ´Ù.

º¸´Ù È¿À²ÀûÀÎ °ÍÀº String.Compare ¸Þ½îµå¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ ¸Þ½îµå´Â ºñ±³ ¿É¼ÇÀ» ¸Å°³º¯¼ö·Î ÃëÇÒ ¼ö ÀÖ´Ù. ÀÌ ¿É¼Ç Áß¿¡ IgnoreCase ¿É¼ÇÀ» »ç¿ëÇÏ¸é ´ë¹®ÀÚ/¼Ò¹®ÀÚ¿¡ °ü°è ¾øÀÌ ºñ±³¸¦ ÇØÁØ´Ù. ¹°·Ð ¾Õ¼­ÀÇ ¿¹Á¦Ã³·³ ºÒÇÊ¿äÇÑ ¹®ÀÚ¿­ °´Ã¼¸¦ »ý¼ºÇÏ´Â ÀÏÀº ¾ø´Ù.

// º¸´Ù È¿À²ÀûÀÎ ÄÚµå ¿¹Á¦
if (String.Compare(s1,s2, CompareOptions.IgnoreCase) == 0) {
    // µ¿ÀÏÇÑ ¹®ÀÚ¿­
}
else {
    // µ¿ÀÏÇÏÁö ¾ÊÀº ¹®ÀÚ¿­
}

±×±îÁþ°Å ±×³É ´ë~Ãæ~

´ëºÎºÐÀÇ °æ¿ì, ÀÌ·¯ÇÑ ³»¿ë±îÁö ¸ðµÎ °í·ÁÇϰí ÄÚµùÀ» ÇÒ¶óÄ¡¸é ¸Ó¸®¿¡ Áã°¡ ³ª±â ¸¶·ÃÀÌ´Ù. ´ëºÎºÐÀÇ °æ¿ì ÀÌ·¸°Ô±îÁö ½Å°æÀ» ¾²¸ç ÇÁ·Î±×·¡¹ÖÀ» ÇØ¾ß ÇÏ´Â °æ¿ì´Â µå¹°´Ù. ƯÈ÷, ±â¾÷¿ë MIS ¾îÇø®ÄÉÀ̼ÇÀ̳ª SI ·ùÀÇ ÇÁ·ÎÁ§Æ®¿¡¼­´Â ±×±îÁö²¨ ±×³É ´ë~Ãæ~ == ¿¬»êÀÚ ¾²°í, ´ë~Ãæ~ ToUpper, ToLower ½á°¡¸é¼­ ÇÁ·Î±×·¥À» ÇØµµ µÈ´Ù.

ÇÏÁö¸¸ ¼ö½Ê, ¼ö¹é¸¸¸íÀÌ »ç¿ëÇÏ´Â ´ëÇü À¥ »çÀÌÆ® ¾îÇø®ÄÉÀ̼ÇÀ̶ó¸é À̾߱Ⱑ Á» ´Þ¶óÁø´Ù. »ç¼ÒÇÑ ÄÚµå Çϳªµµ ¼ö½Ê¸¸¸íÀÌ »ç¿ëÇÏ°Ô µÇ¸é ¼ö½Ê, ¼ö¹é¸¸°³ÀÇ ºÒÇÊ¿äÇÑ ¹®ÀÚ¿­ °´Ã¼µéÀÌ »ý¼ºµÉ ¼öµµ Àֱ⠶§¹®ÀÌ´Ù.

ÆÇ´ÜÀº ´À±×µéÀÌ ¾Ë¾Æ¼­ ÇϽñæ... ÅôÅôÅô~~

 

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