¼Ò¼³°°ÀºC#  Á¦2°­ÀÇ Å¬·¡½ºÀÇ ±âº»¹è°æ  13. ÂüÁ¶Å¸ÀÔ(Reference Type)  

 

2.13 ÂüÁ¶Å¸ÀÔ(Reference Type)

 

 

ÂüÁ¶Å¸ÀÔ(Reference Type)Àº °ªÅ¸ÀÔ°ú ´Þ¸® º¯¼ö¸¦ ¼±¾ðÇÏ´õ¶óµµ ¸Þ¸ð¸®°¡ »ý¼ºÀÌ µÇÁö ¾Ê½À´Ï´Ù. ÀÌ ¸»Àº ÂüÁ¶Å¸ÀÔÀ¸·Î º¯¼ö¸¦ ¼±¾ðÇßÀ» ¶§ ±× º¯¼ö¿¡´Â ¡®¾Æ¹«°Íµµ ¾ø´Ù¡¯ °¡ µÇ´Â °ÍÀÔ´Ï´Ù. ±×¸®°í ¸Þ¸ð¸®¸¦ »ý¼ºÇØ ÁÖ´Â ¼ø°£¿¡ ºñ·Î¼Ò ÂüÁ¶Å¸ÀÔÀÇ º¯¼ö¿¡ °ªÀ» °¡Áö°Ô µÇ´Â °ÍÀÔ´Ï´Ù. Áï, ÂüÁ¶Å¸ÀÔÀº º¯¼öÀÇ ¼±¾ð°ú ¸Þ¸ð¸®ÀÇ »ý¼ºÀÌ ¿ÏÀüÈ÷ ºÐ¸® µÇ¾î ÀÖ´Ù°í ¸»ÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

´ëÇ¥ÀûÀÎ ÂüÁ¶Å¸ÀÔÀº ¿©·¯ºÐÀÌ ¼ö¾øÀÌ »ç¿ëÇϴ Ŭ·¡½ºÀÔ´Ï´Ù. ´ÙÀ½ÀÇ ¿¹Á¦´Â ´Ü¼øÈ÷ Ŭ·¡½ºÀÇ ¼±¾ð°ú ¸Þ¸ð¸®ÀÇ »ý¼ººÎºÐ¸¸À» º¸¿© ÁÖ°í ÀÖ½À´Ï´Ù.

 

&

RefTest.cs

Ü Å¬·¡½º ÂüÁ¶Å¸ÀÔÀ» ¾Ë¾Æº¸±â À§ÇÑ ¿¹Á¦

class RefSample{

    public int mycom = 0 ;

    public int youcom = 0 ;

}

public class RefSampleMain{

    public static void Main(){

        RefSample rs = null;//º¯¼ö ¼±¾ð

        rs = new RefSample();//¸Þ¸ð¸® »ý¼º

    }

}

C:\02>csc RefTest.cs

C:\02>RefTest

 

º¯¼öÀÇ ¼±¾ðºÎºÐÀ» º¸½Ã¸é ºÐ¸í ÀÚ½ÅÀÌ ¾Æ¹«°Íµµ ¾ø´Ù´Â nullÀ» ¸í½ÃÇϰí ÀÖ½À´Ï´Ù. ±×¸®°í³­ ÈÄ¿¡¾ß ºñ·Î¼Ò new ¿¬»êÀÚ¸¦ ÀÌ¿ëÇÏ¿© ¸Þ¸ð¸®¸¦ »ý¼ºÇϰí ÀÖ½À´Ï´Ù. ±×·±µ¥ ¿©±â¼­ Çϳª Áß¿äÇÏ°Ô ´ëµÎµÇ´Â °ÍÀº ¹Ù·Î rs¿¡ ¹«¾ùÀÌ µé¾î ÀֳĴ °ÍÀÔ´Ï´Ù. ÂüÁ¶Å¸ÀÔÀÇ º¯¼ö¿¡ ¹«¾ùÀÌ µé¾î ÀÖÀ»±î¿ä? ±× ÇØ´äÀº ¸Þ¸ð¸®ÀÇ ÁÖ¼Ò°¡ µé¾î ÀÖ´Â °ÍÀÌ ¾Æ´Ï¶ó ¸Þ¸ð¸® ÁÖ¼Ò¿¡ ´ëÇÑ ÂüÁ¶°ªÀÌ µé¾î ÀÖ½À´Ï´Ù.

 

Áß¿ä!! ¢Ã ÂüÁ¶Å¸ÀÔ(Reference Type)

q                ÂüÁ¶Å¸ÀÔÀÇ º¯¼ö¿¡´Â ÁÖ¼Ò¿¡ ´ëÇÑ ÂüÁ¶°ªÀÌ µé¾î ÀÖ´Ù.

 

±×·¸´Ù¸é ÁÖ¼Ò¿¡ ´ëÇÑ ÂüÁ¶°ªÀ̶õ ¹«¾ùÀϱî¿ä? ´ÙÀ½ÀÇ ±×¸²À» Çѹø »ìÆì º¸½Ã±â ¹Ù¶ø´Ï´Ù.

 

 

 

±×¸² 2-4 ÂüÁ¶Å¸ÀÔÀÇ ¸Þ¸ð¸® »ý¼º ¼ø¼­

 

CLRÀÇ Èü(Heap) ¸Þ¸ð¸® °ø°£ ³»¿¡ rs¶ó´Â °´Ã¼ÀÇ ¸Þ¸ð¸®°¡ »ý¼ºµÉ °ÍÀÔ´Ï´Ù. Èü ¸Þ¸ð¸®¿¡ »ý¼ºµÈ rs´Â ¸Þ¸ð¸®ÀÇ ÁÖ¼Ò¸¦ °¡Á®¾ß ±× ¸Þ¸ð¸®ÀÇ ÁÖÀÎÀÌ µÉ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. À§ÀÇ ±×¸²¿¡¼­ º»´Ù¸é new RefSample() ÇÏ´Â ¼ø°£¿¡ ºÐ¸í rs¿¡ ÁÖ¼Ò¸¦ ³Ñ°Ü ÁÖ¸®¶ó »ý°¢µË´Ï´Ù. ÇÏÁö¸¸ À̰ÍÀº °ªÅ¸ÀÔ¿¡¼­³ª °¡´ÉÇÑ ÀÏÀÔ´Ï´Ù. ÀϹÝÀûÀÎ ÂüÁ¶Å¸ÀÔÀº ÇѴܰ踦 ´õ °ÅÄ¡°Ô µË´Ï´Ù. À̰ÍÀÌ ¹Ù·Î ÂüÁ¶¶ó´Â ¸»À» ¸¸µé°Ô µÇ´Â °ÍÀÔ´Ï´Ù. ´ÙÀ½ÀÇ ±×¸²Àº ½ÇÁ¦ ¸Þ¸ð¸® »óÀÇ ÂüÁ¶°¡ ÀÌ·ç¾îÁö´Â ±¸Á¶¸¦ º¸¿© ÁÖ°í ÀÖ½À´Ï´Ù.

 

 

 

 

¢Ñ  ÂüÁ¶Å¸ÀÔÀÇ ¼±¾ð°ú ¸Þ¸ð¸® ÇÒ´ç

ÂüÁ¶Å¸ÀÔÀÇ º¯¼ö¸¦ ¼±¾ðÇÒ ¶§ new¸¦ ÇÏÁö ¾ÊÀ¸¸é ¸Þ¸ð¸®°¡ »ý¼ºµÇÁö ¾Ê½À´Ï´Ù. ÇÏÁö¸¸ ÂüÁ¶Å¸ÀÔÀÇ º¯¼ö ¼±¾ðÀÚü´Â ÂüÁ¶°ª ÀÚü¸¦ ´ãÀ» ¸Þ¸ð¸®´Â È®º¸ÇÏ°Ô µË´Ï´Ù. Áï, 4¹ÙÀÌÆ®ÀÇ Á¤¼öÇü ÂüÁ¶°ªÀ» ´ãÀ» º¯¼ö´Â ¸Þ¸ð¸®¸¦ ½ºÅÿ¡ ÇÒ´çÇÏ°í °´Ã¼ ÀÚüÀÇ ¸Þ¸ð¸®´Â ¾ÆÁ÷ Èü¿¡ »ý¼ºÇÏÁö ¾Ê´Â´Ù´Â ÀǹÌÀÔ´Ï´Ù.

 

°á·ÐÀûÀ¸·Î ÂüÁ¶Å¸ÀÔÀÇ º¯¼ö¸¸ ¼±¾ðÇÑ´Ù¸é ½ºÅÿ¡ ÂüÁ¶°ªÀ» ´ãÀ» ¸Þ¸ð¸®°¡ »ý¼ºµË´Ï´Ù. ÇÏÁö¸¸ ÂüÁ¶°ª ÀÚü´Â nullÀ̸ç new¸¦ ÇÏ´Â ¼ø°£ Èü¿¡ °´Ã¼ÀÇ ¸Þ¸ð¸®°¡ ÇÒ´ç µÇ¸ç Èü¿¡ ÇÒ´çµÈ ¸Þ¸ð¸®ÀÇ ÂüÁ¶°ªÀÌ ½ºÅÃÀÇ ÂüÁ¶º¯¼ö¿¡ null ´ë½Å µé¾î°¡´Â °ÍÀÔ´Ï´Ù.

 

ÀÓÀÇ·Î °´Ã¼ 2°³(rs1, rs2)¸¦ »ý¼ºÇÑ ÇÏ¿´½À´Ï´Ù. ±×¸®°í ±× °´Ã¼°¡ »ý¼ºµÉ ¶§ÀÇ ½ÇÁ¦ÀÇ ¸Þ¸ð¸®´Â À妽º Å×À̺í(Index Table)¿¡¼­ »õ·Î¿î ¹øÈ£¸¦ ÇÒ´ç ¹Þ°Ô µË´Ï´Ù. À̰ÍÀ» °´Ã¼ÀÇ ÇØ½ÃÄÚµå¶ó°í Çϸç ÀÌ ÇØ½ÃÄÚµå´Â CLR³»¿¡ ±× °´Ã¼¸¦ ±¸ºÐÇÒ ¼ö ÀÖ´Â À¯ÀÏÇÑ Å°°¡ µÇ´Â °ÍÀÔ´Ï´Ù. °á±¹, °´Ã¼ º¯¼ö rs1°ú rs2°¡ °¡Áö´Â °ªÀº ÇØ½ÃÄÚµåÀÇ ¹øÈ£¸¦ °®°Ô µÈ´Ù´Â °ÍÀÔ´Ï´Ù. ÂüÁ¶Å¸ÀÔÀ̶ó´Â ¸» ±× ÀÚü°¡ Index Table¿¡¼­ ÇѹøÀÇ ÂüÁ¶¸¦ ´õ °ÅÄ¡°Ú´Ù´Â °ÍÀÌ µË´Ï´Ù.

 

ÂüÁ¶(Reference) ÇÒ´ç

´ÙÀ½°ú °°Àº °æ¿ì¸¦ Çѹø »ý°¢ÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù. ÂüÁ¶°ªÀ» ´Ù¸¥ °÷¿¡ ÇÒ´ç ÇßÀ» ¶§ ÂüÁ¶°ª ÀÚü(ÇØ½ÃÄÚµå)´Â °ªº¹»ç¸¦ ÇÒ ¼ö ÀÖÁö¸¸ ÂüÁ¶°ªÀÌ °¡Áö´Â ³»ºÎÀÇ ¸Þ¸ð¸®ÀÇ ³»¿ëÀÌ º¹»ç µÇ´Â °ÍÀº ¾Æ´Õ´Ï´Ù.

 

n                  RefSample rs1 = new RefSample();//rs1ÀÇ °ªÀº 10001

n                  RefSample jane = rs1;//janeÀÇ °ªÀº 10001ÀÌ µÈ´Ù.

 

ÀÌ ¿¹¹®¿¡¼­ ¿ì¸®´Â rs1¿¡ 10001ÀÇ ÇØ½ÃÄڵ尪ÀÌ µé¾î ÀÖ´Ù°í »ý°¢ÇÏÁÒ. ±×¸®°í À§ÀÇ ±×¸²¿¡¼­¿Í °°ÀÌ 10001ÀÇ ¸Þ¸ð¸®´Â FFFF:07CA°¡ µÉ °ÍÀÔ´Ï´Ù. ºÐ¸í rs1¿¡´Â 10001ÀÌ µé¾î ÀÖ°í 10001Àº FFFF:07CA¸¦ °¡¸£Å°°í ÀÖ½À´Ï´Ù. rs1ÀÇ ÂüÁ¶°ªÀ» jane¿¡ °ªº¹»ç¸¦ ÇÏ¸é ¾î¶»°Ô µÉ±î¿ä? jane¿¡´Â ´ç¿¬È÷ 10001ÀÇ °ªÀÌ µé¾î°¡°Ô µË´Ï´Ù. ±×·¸´Ù¸é janeµµ ¸Þ¸ð¸® FFFF:07CA¸¦ °¡¸£Å°Áö ¾Ê°Ú½À´Ï±î! ¾ÆÁÖ ´ç¿¬ÇÑ ¼Ò¸®ÁÒ. ±×·¡¼­ °´Ã¼¸¦ ´Ù¸¥ °÷¿¡ ÇÒ´çÇßÀ» ¶§´Â ÂüÁ¶°ªÀ» ¾ò´Â °ÍÀÌÁö ¸Þ¸ð¸®ÀÇ ³»¿ëÀÌ º¹»çµÇ´Â °ÍÀÌ ¾Æ´Ï¶ó´Â °ÍÀÔ´Ï´Ù.

 

jane = rs1Àº °ª¿¡ ÀÇÇÑ Àü´ÞÀÌ µÇ¾úÁö¸¸ rs1 ³»¿¡ µé¾î ÀÖ´Â °Í ÀÚü°¡ ÂüÁ¶°ªÀ̱⠶§¹®¿¡ ÂüÁ¶°ªÀ» ¾Æ¹«¸® º¹»çÇØµµ Àý´ë ¸Þ¸ð¸®ÀÇ ³»¿ëÀº º¹»çµÇÁö ¾Ê´Â´Ù´Â °ÍÀÔ´Ï´Ù.

 

±×¸®°í ¿©·¯ºÐÀÌ ÇѰ¡Áö Àذí Áö³ª°¡½Ã´Â °ÍÀÌ ÀÖ½À´Ï´Ù. RefSample jane¿¡¼­ janeÀº Èü¿¡ ¸Þ¸ð¸®µµ »ý¼ºÇÏÁö ¾Ê°í ÀÖÁö ¾Ê½À´Ï±î? ±×·¯´Ï ¸Þ¸ð¸®Â÷¿øÀÇ °ª º¹»ç¸¦ ÇÒ Áغñ°¡ µÇ¾îÀÖÁö ¾ÊÀº °ÍÀ» ´À³¢½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. janeÀº ÇØ½ÃÄڵ尪À» ÀúÀåÇÒ ¼ö ÀÖ´Â ¸Þ¸ð¸®¸¦ »ý¼º ÇÑ ÈÄ ÇØ½ÃÄڵ尪¸¸À» ³Ñ°Ü ¹Þ°Ú´Ù´Â °ÍÀÌÁö¿ä. Áï, ÇØ½ÃÄÚµå °ªº¹»ç¸¦ ÇÏ´Â °ÍÀÌ µË´Ï´Ù. ±×¸®°í ¸¸¾à ¿©·¯ºÐÀÌ Æ¯Á¤ °´Ã¼ÀÇ ÇØ½ÃÄڵ带 °¡Áö°í ÀÖ´Ù¸é ±× °´Ã¼ÀÇ ¸ðµç ±â´ÉÀ» ÀüºÎ »ç¿ëÇÒ ¼ö ÀÖ´Ù´Â °Íµµ ÀØÁö ¸¶½Ã±â ¹Ù¶ø´Ï´Ù.



jabookÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°ÀºC# Á¦2°­ÀÇ
ÀúÀÚ:ÃÖ¿µ°ü