¼Ò¼³°°ÀºC#  Á¦5°­ÀÇ C#ÀÇ ´ÙÇü¼º  04. UnBoxing  

 

 

5.4 UnBoxing

 

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°­ÀÇ
ÀúÀÚ:ÃÖ¿µ°ü