¼Ò¼³°°ÀºC#  Á¦5°­ÀÇ C#ÀÇ ´ÙÇü¼º  05. ±¸Á¶Ã¼ÀÇ Boxing°ú Ŭ·¡½ºÀÇ Çüº¯È¯  

 

 

5.5 ±¸Á¶Ã¼ÀÇ Boxing°ú Ŭ·¡½ºÀÇ Çüº¯È¯

 

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