Boxing º¯È¯Àº °ªÀÇ º¹»çº»À» ¸¸µé¾î Èü¿µ¿ªÀÇ Box¿¡ ÀúÀåÇÑ´Ù °ÍÀ¸·Î ¾Ë°í ÀÖ½À´Ï´Ù. ±¸Á¶Ã¼(struct) ¶ÇÇÑ °ªÅ¸ÀÔÀ̱⠶§¹®¿¡ ±âº»ÀûÀÎ Boxing°ú UnBoxingÀÇ º¯È¯ÀÌ ÀÌ·ç¾îÁý´Ï´Ù. ´ÙÀ½ ¿¹´Â ±¸Á¶Ã¼(struct)ÀÇ Boxing°ú UnBoxingÀ» º¸¿©ÁÖ°í ÀÖ½À´Ï´Ù.
|
& |
BoxingTest2.cs |
Ü Boxing º¯È¯°ú ÂüÁ¶Å¸ÀÔÀÇ object º¯È¯ |
|
using System; struct Point { public int x, y; public Point(int x, int y) { this.x = x; this.y = y; } } class BoxingTest2 { public static void Main() { Point p = new Point(10, 10); object box = p; p.x = 20; Console.Write(((Point)box).x); }//main }//class | ||
|
C:\C#Example\05>csc BoxingTest2.cs C:\C#Example\05>BoxingTest2 10 | ||
À§ÀÇ ¿¹Á¦´Â intÇüÀ» objectÇüÀ¸·Î º¯È¯ÇÏ´Â °Í°ú º°´Ù¸¦ °ÍÀÌ ¾øÁö¸¸ ¿©·¯ºÐÀÌ ÁÖÀDZí°Ô º¸¾Æ¾ß ÇÏ´Â °ÍÀÌ ÀÖ½À´Ï´Ù. ±¸Á¶Ã¼ ¶ÇÇÑ °©Å¸ÀÔÀ̱⠶§¹®¿¡ objectÇüÀ¸·Î BoxÈÇϸé BoxingÀÇ ¿ø¸®´ë·Î Èü(Heap)¿¡ ¸Þ¸ð¸®°¡ »õ·Î »ý¼ºµÈ´Ù´Â °ÍÀÔ´Ï´Ù. ¸¸¾à ¿©·¯ºÐÀÌ ´Ù½Ã UnBoxingÀ» ÇÑ´Ù¸é ¸Þ¸ð¸®´Â ´Ù½Ã ½ºÅÃ(Stack)À¸·Î °ªº¹»ç¸¦ ÇÏ°Ô µË´Ï´Ù.
À§ÀÇ ¿¹Á¦¿¡¼ ±¸Á¶Ã¼ p¿Í °´Ã¼ boxÀÇ ¸Þ¸ð¸®´Â µû·Î Á¸ÀçÇÕ´Ï´Ù. ±×·¸±â ¶§¹®¿¡ pÀÇ °ªÀ» º¯È¯ÇÏ¿©µµ boxÀÇ °ªÀº ¹Ù²î´Â °ÍÀÌ ¾Æ´Õ´Ï´Ù.
n Point p = new Point(10,10); //½ºÅà ¸Þ¸ð¸® »ý¼º
n object box = p; //Èü ¸Þ¸ð¸® »ý¼º
óÀ½¿¡ ±¸Á¶Ã¼¿¡¼ BoxÈ µÉ ¶§ Çѹø ¸Þ¸ð¸®°¡ »ý¼ºµÇ°í °ªÀÌ º¹»çµË´Ï´Ù. ±×¸®°í BoxÈµÈ °ÍÀÌ ´Ù½Ã ±¸Á¶Ã¼·Î º¯È¯ µÉ ¶§ ±¸Á¶Ã¼ÀÇ ¸Þ¸ð¸®·Î °ªÀ» º¹»çÇÏ°Ô µÇ´Â °ÍÀÔ´Ï´Ù. ¸¸¾à, ±¸Á¶Ã¼°¡ ¾Æ´Ñ Ŭ·¡½º·Î ¼±¾ðµÇ¾ú´Ù¸é À̰ÍÀº ¾÷ij½ºÆÃ(UpCasting)°ú ´Ù¿îij½ºÆÃ(DownCasting)ÀÇ ÀǹÌÀÔ´Ï´Ù. ÀÌ ¶§ÀÇ Ä³½ºÆÃÀº »ó¼Ó°ü°è¿¡¼ ³ªÅ¸³ª´Â Çüº¯È¯ÀÔ´Ï´Ù. Boxing°ú UnBoxing°ú´Â ÀüÇô ´Ù¸¥ Àǹ̸¦ ´ã°í ÀÖ½À´Ï´Ù. ÀÌ ¿¹Á¦¸¦ ÀÌÇØÇÒ ¼ö ¾øÀ¸½Ã¸é ¾÷ij½ºÆÃÀ» Âü°íÇϽñ⠹ٶø´Ï´Ù. ´ÙÀ½°ú °°ÀÌ Point¸¦ Ŭ·¡½º·Î ¼±¾ðÇÑ ÈÄ Ä³½ºÆÃÀ» Å×½ºÆ® ÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
|
& |
BoxingTest3.cs |
Ü µ¿ÀÏÇÑ ÀνºÅϽº¸¦ ÂüÁ¶ ÇÏ´Â ¿¹Á¦ |
|
using System; class Point { public int x, y; public Point(int x, int y) { this.x = x; this.y = y; } } class BoxingTest3 { public static void Main() { Point p = new Point(10, 10); object box = p; //ÃÖ»óÀ§ÇüÀ¸·Î UpcastingµÈ´Ù. Boxing°ú UnBoxing°ú ¹«°ü p.x = 20; Console.Write(((Point)box).x); }//main }//class | ||
|
C:\C#Example\05>csc BoxingTest3.cs C:\C#Example\05>BoxingTest3 20 | ||
Ŭ·¡½º´Â °´Ã¼ÀÇ ÁÖ¼Ò¹øÁö¸¦ ÂüÁ¶ÇÕ´Ï´Ù. ±×·¯´Ï ´ç¿¬È÷ xÀÇ °ªÀÌ ¹Ù²î´õ¶óµµ PointÀÇ °´Ã¼ pÀÇ ÁÖ¼Ò ¹øÁö´Â º¯°æµÇÁö ¾Ê½À´Ï´Ù. Áï, Ŭ·¡½º p°¡ ÃÖ»óÀ§ Ŭ·¡½ºÀÎ object ÇüÀ¸·Î Çüº¯È¯ÇÑ °ÍÀÔ´Ï´Ù. Boxing°ú UnBoxingÀÇ º¯È¯°ú Ŭ·¡½ºÀÇ »ó¼Ó±¸Á¶¿¡¼ÀÇ Çüº¯È¯Àº ¾ö¿¬È÷ Ʋ¸° °ÍÀÌ´Ï Àß ±¸º°ÇϽñ⠹ٶø´Ï´Ù.
| jabookÀúÀÚ¸íÇÔ |
|
Á¦¸ñ:¼Ò¼³°°ÀºC# Á¦5°ÀÇ ÀúÀÚ:ÃÖ¿µ°ü |