UnBoxingÀº object Çü¿¡¼ °ªÅ¸ÀÔÀ¸·ÎÀÇ ¸í½ÃÀû º¯È¯ÀÔ´Ï´Ù. BoxingÀÇ ¹Ý´ëµÇ´Â °³³äÀÌÁÒ. UnBoxing ¿¬»ê °úÁ¤Àº ´ÙÀ½°ú °°½À´Ï´Ù.
|
¢Ã UnBoxingÀ̶õ? |
|
q °³Ã¼ ÀνºÅϽº°¡ ÁöÁ¤ÇÑ °ªÅ¸ÀÔÀ» BoxingÇÑ °ªÀÎÁö È®ÀÎ q °ªÅ¸ÀÔÀÇ »õ·Î¿î ¸Þ¸ð¸® »ý¼º q ÀνºÅϽºÀÇ °ªÀ» °ªÅ¸ÀÔ º¯¼ö¿¡ º¹»çÇÑ´Ù. q BoxingÇÑ ¸Þ¸ð¸®¿Í UnBoxingÇÑ ¸Þ¸ð¸® µÎ°³°¡ Á¸Àç. q Boxing°ú UnBoxing¿¡´Â ÂüÁ¶ÀÇ Àǹ̴ ¾øÀ½. |
ÀÏ´Ü BoxingÀ» ÇÏ·Á°í Çϸé ÇØ´ç ÀνºÅϽº°¡ BoxingµÇ¾î ÀÖ´Â °ÍÀÎÁö¸¦ È®ÀÎÇÕ´Ï´Ù. È®ÀÎÀÌ µÇ¸é ½ºÅÿµ¿ª¿¡ »õ·Î¿î ¸Þ¸ð¸®¸¦ »ý¼ºÇÏ¿© °ª¸¸À» º¹»çÇÏ°Ô µË´Ï´Ù. ÀÌ ¶§ ½ºÅÿ¡ »ý¼ºµÈ ¸Þ¸ð¸®¿Í Èü¿¡ ÀÖ´Â ¸Þ¸ð¸®´Â ÀüÇô º°°³ÀÇ ¸Þ¸ð¸®°¡ µÇ¸ç ¾î¶°ÇÑ ÂüÁ¶ÀÇ Àǹ̵µ Æ÷ÇÔÇϰí ÀÖÁö ¾Ê½À´Ï´Ù. Áï, UnBoxingµÈ °Í°ú BoxingµÈ °ÍÀº ÀüÇô º°°³ÀÇ ¸Þ¸ð¸®¶ó´Â °ÍÀÔ´Ï´Ù. ´ÙÀ½ ¿¹Á¦´Â Boxing ¹× UnBoxing ¿¬»êÀ» ¸ðµÎ º¸¿©ÁÖ°í ÀÖ½À´Ï´Ù.
|
& |
UnBoxingTest1.cs |
Ü UnBoxing º¯È¯À» Å×½ºÆ®Çϱâ À§ÇÑ ¿¹Á¦ |
|
using System; class UnBoxingTest1 { public static void Main() { int p = 123; object o = p; //Boxing int j = (int) o; //UnBoxing ¸í½ÃÀûÀ¸·Î ij½ºÆÃÇØÁÖ¾î¾ß ÇÔ Console.WriteLine("j = " + j); Console.WriteLine("p = " + p); Console.WriteLine("o = " + o); }//main }//class | ||
|
C:\C#Example\05>csc UnBoxingTest1.cs C:\C#Example\05>UnBoxingTest1 j = 123 p = 123 o = 123 | ||
¿¹Á¦¿¡¼ º¼ ¼ö ÀÖµíÀÌ, UnBoxingÀº ¹Ýµå½Ã ¸í½ÃÀûÀ¸·Î ÀÌ·ç¾îÁö¸ç, BoxingµÈ º¯¼öÀÇ °ø°£°ú´Â º°µµÀÇ ½ºÅÃ(Stack) °ø°£¿¡ °ªÀÌ ÀúÀåµË´Ï´Ù. ÁöÁ¤ÇÑ °ªÅ¸ÀÔÀÇ UnBoxing º¯È¯ÀÌ ·±Å¸ÀÓ¿¡ ¼º°øÀûÀ¸·Î ¼öÇàÇÏ·Á¸é BoxingµÈ object o¸¦ °ªÅ¸ÀÔÀÇ º¯¼ö¿¡ ÇÒ´çÇÏ¸é µÇ´Â °ÍÀÔ´Ï´Ù. ÀÌ ¶§ ½ºÅÿµ¿ª¿¡´Â »õ·Î¿î ¸Þ¸ð¸®°¡ »ý¼ºµË´Ï´Ù. ±×¸®°í, ¹¬½ÃÀûÀÎ Çüº¯È¯À» ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ¹Ýµå½Ã ¸í½ÃÀûÀ¸·Î BoxingµÈ µ¥ÀÌÅÍ¿¡ ¸Â´Â ÇüÀ¸·Î Çüº¯È¯À» ÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù. ¸¸¾à À߸øµÈ Çüº¯È¯À» ÇÑ´Ù¸é System.InvalidCastException ¿À·ù°¡ ¹ß»ýÇÕ´Ï´Ù. ´ÙÀ½ ¿¹Á¦´Â System.InvalidCastException ¿À·ù°¡ ¹ß»ýÇÏ´Â ¿¹ÀÔ´Ï´Ù.
|
& |
UnBoxingTest2.cs |
Ü UnBoxing º¯È¯ ½Ã ÂüÁ¶ ¿À·ù·Î ÀÎÇÑ ¿¹¿Ü¸¦ Å×½ºÆ® |
|
using System; public class UnBoxingTest2 { public static void Main() { int p = 123; object o = p; // Boxing try { int j = (short) o;//¿¡·¯ ¹ß»ý-À߸øµÈ Çüº¯È¯ Console.WriteLine("UnBoxing OK."); } catch (InvalidCastException e) { Console.WriteLine(e +" Error: Incorrect UnBoxing."); } }//main }//class | ||
|
C:\C#Example\05>csc UnBoxingTest2.cs C:\C#Example\05>UnBoxingTest2 System.InvalidCastException: ÁöÁ¤ÇÑ Ä³½ºÆ®°¡ À߸øµÇ¾ú½À´Ï´Ù. at UnBoxingTest2.Main() Error: Incorrect UnBoxing. | ||
À§ÀÇ ¿¹Á¦¿¡¼, ¡®int j = (short) o;¡¯¸¦ ¡®int j = (int) o;¡¯·Î ¹Ù²Ü °æ¿ì ÄÚµå´Â Á¤»óÀûÀ¸·Î ¼öÇàµË´Ï´Ù.
Áö±Ý±îÁö Boxing°ú UnBoxing º¯È¯¿¡ ´ëÇØ¼ »ìÆìº¸¾Ò½À´Ï´Ù. °ªÅ¸ÀÔÀ» ÂüÁ¶Å¸ÀÔÀ¸·Î º¯È¯À» ÇÒ ¼ö ÀÖÀ¸¸ç, ÂüÁ¶Å¸ÀÔÀÌ °ªÅ¸ÀÔÀ¸·Î º¯È¯ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀº ¾ÆÁÖ ¸¹Àº ÀåÁ¡À» °¡Áö°í ÀÖ½À´Ï´Ù. ¾à°£¸¸ Àͼ÷ÇØÁö¸é ¹«ÀÇ½Ä Áß¿¡ »ç¿ëÇÏ°Ô µÇ´Â ±â¹ýÀ̱⵵ ÇÕ´Ï´Ù. ÀÌ Boxing°ú UnBoxing º¯È¯Àº ¿©·¯ºÐÀÌ »ý°¢ÇÏÁö ¸øÇÏ´Â »óȲ¿¡¼ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÁ·Î±×·¡¸Ó°¡ ÀνÄÇÏÁö ¸øÇÏ´Â °æ¿ì¿¡µµ ¸¹ÀÌ ÀϾ¹Ç·Î »ç¿ëÇÏ½Ç ¶§´Â À¯ÀÇÇØ¼ »ç¿ëÇϽñ⠹ٶø´Ï´Ù.
| jabookÀúÀÚ¸íÇÔ |
|
Á¦¸ñ:¼Ò¼³°°ÀºC# Á¦5°ÀÇ ÀúÀÚ:ÃÖ¿µ°ü |