°Á Àü Å¿ÀÀÇ Àâ´ã>
À¯¼ö¼®Àº ÇöÀç µå¿ø ¼ÒÇÁÆ®¿þ¾îÀÇ ¼ö¼® ÄÁ¼³ÅÏÆ®·Î ±Ù¹«ÇÏ°í °è½Ã¸ç, .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 ½á°¡¸é¼ ÇÁ·Î±×·¥À» ÇØµµ µÈ´Ù.
ÇÏÁö¸¸ ¼ö½Ê, ¼ö¹é¸¸¸íÀÌ »ç¿ëÇÏ´Â ´ëÇü À¥ »çÀÌÆ® ¾îÇø®ÄÉÀ̼ÇÀ̶ó¸é À̾߱Ⱑ Á» ´Þ¶óÁø´Ù. »ç¼ÒÇÑ ÄÚµå Çϳªµµ ¼ö½Ê¸¸¸íÀÌ »ç¿ëÇÏ°Ô µÇ¸é ¼ö½Ê, ¼ö¹é¸¸°³ÀÇ ºÒÇÊ¿äÇÑ ¹®ÀÚ¿ °´Ã¼µéÀÌ »ý¼ºµÉ ¼öµµ Àֱ⠶§¹®ÀÌ´Ù.
ÆÇ´ÜÀº ´À±×µéÀÌ ¾Ë¾Æ¼ ÇϽñæ... ÅôÅôÅô~~
°Á ¸ñ·ÏÀ¸·Î..
|