15-4.·¹ÆÛ·±½º

15-4-°¡.º¯¼öÀÇ º°¸í

·¹ÆÛ·±½º(Reference)´Â C++¿¡¼­ »õ·Î Ãß°¡µÈ ±â´ÉÀÌ¸ç º¯¼öÀÇ º°¸í(alias)À» Á¤ÀÇÇÑ´Ù. º°¸íÀ» ºÙÀÌ°Ô µÇ¸é ÇÑ ´ë»ó¿¡ ´ëÇØ µÎ °³ÀÇ À̸§ÀÌ »ý±â°Ô µÇ°í º»·¡ À̸§Àº ¹°·ÐÀÌ°í º°¸íÀ¸·Îµµ º¯¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ·¹ÆÛ·±½º¸¦ ¼±¾ðÇÏ´Â ±âº» Çü½ÄÀº ´ÙÀ½°ú °°´Ù.

 

type &º¯¼ö=ÃʱⰪ;

 

Æ÷ÀÎÅÍ º¯¼ö¸¦ ¼±¾ðÇÒ ¶§ ±¸µÎÁ¡ *¸¦ »ç¿ëÇϴµ¥ ºñÇØ ·¹ÆÛ·±½º¸¦ ¼±¾ðÇÒ ¶§´Â ±¸µÎÁ¡ &¸¦ »ç¿ëÇÑ´Ù. Æ÷ÀÎÅͰ¡ ±âº» ŸÀÔ¿¡ ´ëÇÑ À¯µµÇüÀ̵íÀÌ ·¹ÆÛ·±½ºµµ À¯µµÇüÀ̶ó´Â Á¡¿¡¼­ µ¿ÀÏÇÏµÇ Æ¯Á¤ ´ë»óü¿¡ ´ëÇÑ º°¸íÀ̹ǷΠ¼±¾ðÇÒ ¶§ ¾î¶² ´ë»óü¿¡ ´ëÇÑ º°¸íÀÎÁö¸¦ ¹Ýµå½Ã ¹àÇô¾ß ÇÑ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. ´ÙÀ½ÀÌ ·¹ÆÛ·±½º¸¦ »ç¿ëÇÏ´Â °¡Àå °£´ÜÇÑ ¿¹Á¦ÀÌ´Ù.

 

¿¹ Á¦ : Ref1

#include <Turboc.h>

 

void main()

{

     int i=3;

     int &ri=i;

 

     printf("i=%d, ri=%d\n",i,ri);

     ri++;

     printf("i=%d, ri=%d\n",i,ri);

     printf("i¹øÁö=%x, ri¹øÁö=%x\n",&i,&ri);

}

 

Á¤¼öÇü º¯¼ö i¸¦ 3À¸·Î ÃʱâÈ­ÇßÀ¸¸ç Á¤¼öÇü ·¹ÆÛ·±½º ri¸¦ i·Î ÃʱâÈ­Çß´Ù. int &ri=i; ¼±¾ð¿¡ ÀÇÇØ Á¤¼öÇü º¯¼ö i¿¡ ´ëÇØ ri¶ó´Â º°¸íÀ» ¸¸µç °ÍÀÌ´Ù. ÀÌÈÄ ri´Â i¿Í ¿ÏÀüÈ÷ µ¿ÀÏÇÑ ´ë»óÀ» °¡¸®Å°¸ç µÑ Áß Çϳª¸¦ º¯°æÇÏ¸é ³ª¸ÓÁö Çϳªµµ ¹Ù²ï´Ù. ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.

 

i=3, ri=3

i=4, ri=4

i¹øÁö=12ff7c, ri¹øÁö=12ff7c

 

i¿Í riÀÇ °ªÀ» Ãâ·ÂÇߴµ¥ µÑ ´Ù ¶È°°Àº °ª 3À» °¡Áø´Ù. ÀÌ »óÅ¿¡¼­ ri¸¦ 1 Áõ°¡½ÃŲ ÈÄ °ªÀ» Ãâ·ÂÇØ º¸¸é ri¸¸ Áõ°¡ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó i¿Í ri°¡ °°ÀÌ Áõ°¡µÇ¾î µÑ ´Ù 4°¡ µÈ´Ù. ri°¡ iÀÇ º°¸íÀ̱⠶§¹®¿¡ ri¿¡ ´ëÀԵǴ °ªÀº i¿¡µµ ¶È°°ÀÌ ´ëÀÔµÇ¸ç ¹Ý´ë·Î iÀÇ °ªÀ» ¹Ù²Ù¸é riµµ °°ÀÌ º¯°æµÈ´Ù. µÎ º¯¼ö°¡ °¡¸®Å°´Â ½ÇÁ¦ ¹øÁö¸¦ Ãâ·ÂÇØ º¸¸é µ¿ÀÏÇÑ À§Ä¡¸¦ °¡¸®Å°°í ÀÖÀ½À» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

º¸´Ù½ÃÇÇ ·¹ÆÛ·±½º´Â ´ë»óü¿Í µ¿ÀÏÇÑ ÁÖ¼Ò¸¦ °¡Áö´Â ¿ÏÀüÇÑ º°¸íÀÌ´Ù. ri´Â i¿Í À̸§¸¸ ´Ù¸¦ »ÓÀÌÁö °°Àº º¯¼öÀÎ °ÍÀÌ´Ù. TÇü º¯¼ö vÀÇ º°¸í rÀ» Çϳª ¸¸µé°í ½Í´Ù¸é ¾ðÁ¦µçÁö T &r=v;·Î ¼±¾ðÇÏ¸é µÈ´Ù. º°¸íÀ̶õ ÀÏ»ó »ýȰ¿¡¼­ »ç¿ëÇÏ´Â ¿ë¾î¿Í ÀÏÄ¡ÇϹǷΠ°³³äÀûÀ¸·Î ÀÌÇØÇϱ⠽±´Ù. ´ÙÀ½Àº ·¹ÆÛ·±½º¸¦ ¼±¾ðÇÏ°í »ç¿ëÇÒ ¶§ÀÇ ÀϹÝÀûÀÎ ÁÖÀÇ »çÇ×ÀÌ´Ù.

 

 ·¹ÆÛ·±½º¿Í ´ë»óü´Â ŸÀÔÀÌ ¿ÏÀüÈ÷ ÀÏÄ¡ÇØ¾ß ÇÑ´Ù. ·¹ÆÛ·±½º°¡ ´ë»ó º¯¼öÀÇ ¿ÏÀüÇÑ º°¸íÀÌ µÇ·Á¸é °°Àº ŸÀÔÀ» °¡Á®¾ß ÇÑ´Ù. ´ÙÀ½ ¿¹¸¦ º¸ÀÚ.

 

int i;

int &ri=i;                      // °¡´É

double &rd=i;               // ¿¡·¯

short &rs=i;                 // ¿¡·¯

unsigned &ru=i;           // ¿¡·¯

 

Á¤¼öÇü(int) º¯¼ö iÀÇ ·¹ÆÛ·±½º´Â ¹Ýµå½Ã Á¤¼öÇüÀ̾î¾ß ÇÑ´Ù. ½Ç¼öÇü ·¹ÆÛ·±½º·Î´Â iÀÇ º°¸íÀ» ¸¸µé ¼ö ¾øÀ¸¸ç ½ÉÁö¾î intÇü°ú ȣȯµÇ´Â short, unsigned ÇüÀ¸·Îµµ º°¸íÀ» ¸¸µé ¼ö ¾ø´Ù.

 ·¹ÆÛ·±½º´Â »ý¼º Á÷ÈĺÎÅÍ º°¸íÀ¸·Î µ¿ÀÛÇϱ⠶§¹®¿¡ ¼±¾ðÇÒ ¶§ Ãʱâ½ÄÀ¸·Î ¹Ýµå½Ã ´ë»óü¸¦ ÁöÁ¤ÇØ¾ß ÇÑ´Ù. Æ÷ÀÎÅÍÀÇ °æ¿ì´Â ÀÏ´Ü ¼±¾ðÇØ ³õ°í ³ªÁß¿¡ °¡¸®Å³ º¯¼öÀÇ ¹øÁö¸¦ ´ëÀÔ¹ÞÀ» ¼ö ÀÖÁö¸¸ ·¹ÆÛ·±½º´Â ±×·¸Áö ¸øÇÏ´Ù.

 

int *pi;

pi=&i;

int &ri;      // ¿¡·¯

ri=i;

 

¾Æ¹« °Íµµ °¡¸®Å°Áö ¾Ê´Â ³Î ·¹ÆÛ·±½º¸¦ ÀÎÁ¤ÇÏÁö ¾Ê±â ¶§¹®¿¡ int &ri;¶ó´Â ¼±¾ð¹®ÀÌ ¿¡·¯·Î 󸮵ȴÙ. ¼±¾ðÇÒ ¶§ºÎÅÍ ´©±¸ÀÇ º°¸íÀÎÁö¿¡ ´ëÇÑ ÁöÁ¤ÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ´Ü, ´ÙÀ½ÀÇ °æ¿ì´Â ¿¹¿ÜÀûÀ¸·Î ÃʱⰪÀÌ ¾ø´Â ·¹ÆÛ·±½º¸¦ ¼±¾ðÇÒ ¼ö ÀÖ´Ù.

 

¨ç ÇÔ¼öÀÇ Àμö ¸ñ·Ï¿¡ »ç¿ëµÇ´Â ·¹ÆÛ·±½º Çü½Ä Àμö. ÇÔ¼ö°¡ È£ÃâµÉ ¶§ ½ÇÀμö¿¡ ´ëÇÑ º°¸íÀ¸·Î ÃʱâÈ­µÈ´Ù. ÀÌ·± ¿¹´Â ¹Ù·Î ´ÙÀ½ Ç׿¡¼­ »ìÆìº¼ °ÍÀÌ´Ù.

¨è Ŭ·¡½ºÀÇ ¸â¹ö·Î ¼±¾ðµÉ ¶§. À̶§´Â Ŭ·¡½ºÀÇ »ý¼ºÀÚ¿¡¼­ ¹Ýµå½Ã ÃʱâÈ­ÇØ¾ß ÇÑ´Ù. ¸¸¾à »ý¼ºÀÚ¿¡¼­ ·¹ÆÛ·±½º ¸â¹ö¸¦ ÃʱâÈ­ÇÏÁö ¾ÊÀ¸¸é ¿¡·¯·Î 󸮵ȴÙ.

¨é º¯¼ö¸¦ extern ¼±¾ðÇÒ ¶§. À̶§´Â ·¹ÆÛ·±½ºÀÇ Ãʱâ½ÄÀÌ ¿ÜºÎ¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù´Â ¶æÀ̹ǷΠÃʱⰪÀ» ÁÖÁö ¾Ê¾Æµµ µÈ´Ù. extern int &ri; ¼±¾ð¹®Àº ri°¡ ¾î¶² º¯¼ö¿¡ ´ëÇÑ º°¸íÀ¸·Î ¿ÜºÎ¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù´Â ¶æÀÌ´Ù.

 

ÀÌ·± ¿¹¿ÜÀûÀÎ °æ¿ì¶ó ÇÏ´õ¶óµµ ·¹ÆÛ·±½ºÀÇ ´ë»óü ÁöÁ¤ÀÌ ÇÔ¼ö È£Ãâ ½ÃÁ¡À̳ª °´Ã¼ »ý¼º ½ÃÁ¡À¸·Î ¿¬±âµÇ´Â °Í»ÓÀÌÁö ´ë»óü°¡ ¾ø´Â ·¹ÆÛ·±½º¸¦ Çã¿ëÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. ·¹ÆÛ·±½º°¡ ½ÇÁ¦ ¸Þ¸ð¸®¿¡ »ý¼ºµÉ ¶§´Â ¹Ýµå½Ã ´©±¸ÀÇ º°¸íÀÎÁö ÁöÁ¤µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù.

 ·¹ÆÛ·±½º´Â ÀÏ´Ü ¼±¾ðµÇ¸é Ãʱâ½Ä¿¡¼­ ÁöÁ¤ÇÑ ´ë»óüÀÇ º°¸íÀ¸·Î °è¼Ó »ç¿ëµÈ´Ù. ±×·¡¼­ ¼±¾ðµÈ ÈÄ Áß°£¿¡ ÂüÁ¶ ´ë»óÀ» º¯°æÇÒ ¼ö ¾øÀ¸¸ç ÆÄ±«µÉ ¶§±îÁö °°Àº ´ë»óü¸¸ °¡¸®Å³ ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹¸¦ º¸ÀÚ.

 

¿¹ Á¦ : Ref2

#include <Turboc.h>

 

void main()

{

     int i=3,j=7;

     int &ri=i;

 

     printf("i=%d, ri=%d, j=%d\n",i,ri,j);

     ri=j;

     printf("i=%d, ri=%d, j=%d\n",i,ri,j);

}

 

ri´Â iÀÇ ·¹ÆÛ·±½º·Î ÃʱâÈ­µÇ¾úÀ¸¹Ç·Î ÀÌÈĺÎÅÍ ri´Â iÀÇ º°¸íÀ¸·Î »ç¿ëµÈ´Ù. Áß°£¿¡ ri=j ´ëÀÔ¹®À¸·Î riÀÇ ´ë»óü¸¦ j·Î º¯°æÇØ ºÃ´Âµ¥ °á°ú´Â ´ÙÀ½°ú °°´Ù.

 

i=3, ri=3, j=7

i=7, ri=7, j=7

 

ÃÖÃÊ i¿Í ri´Â 3À̰í j´Â 7ÀÌ´Ù. ÀÌ »óÅ¿¡¼­ ri=j; ´ëÀÔ¹®¿¡ ÀÇÇØ ri°¡ j¸¦ °¡¸®Å°µµ·Ï ÇßÀ¸¹Ç·Î i´Â 3À̰í ri¿Í j´Â 7ÀÌ µÉ °Í °°Áö¸¸ ±×·¸Áö ¾Ê°í ¸ðµç º¯¼öµéÀÌ ÀÏÁ¦È÷ 7·Î ¹Ù²î¾î ¹ö·È´Ù. ¿Ö³ÄÇϸé ri´Â iÀÇ º°¸íÀ¸·Î ÃʱâÈ­µÇ¾úÀ¸¹Ç·Î ri=j ´ëÀÔ¹®Àº °ð i=j°¡ µÇ±â ¶§¹®ÀÌ´Ù. ÀÌ ´ëÀÔ¹®Àº riÀÇ ´ë»óü¸¦ j·Î ¹Ù²Ù´Â °ÍÀÌ ¾Æ´Ï¶ó ri°¡ °¡¸®Å°´Â º»·¡ º¯¼ö i¿¡ jÀÇ °ªÀ» ´ëÀÔÇÏ´Â ¸í·ÉÀ¸·Î ÇØ¼®µÈ´Ù.

·¹ÆÛ·±½º¿¡ ´ëÇÑ ´ëÀÔ ¿¬»êÀÚ(=)´Â ·¹ÆÛ·±½ºÀÇ ´ë»óü¸¦ ¹Ù²Ù´Â °ÍÀÌ ¾Æ´Ï¶ó ´ë»óüÀÇ °ªÀ» º¯°æÇÏ´Â °ÍÀ¸·Î Á¤ÀǵǾî ÀÖ´Ù. Áï ½ÇÇàÁß¿¡ = ¿¬»êÀÚ·Î ·¹ÆÛ·±½ºÀÇ ´ë»óü¸¦ º¯°æÇÒ ¼ö ¾øÀ¸¸ç ±×·¡¼­ ¼±¾ðÇÒ ¶§ ÇÑ ¹ø¸¸ ÃʱâÈ­ÇÒ ¼ö ÀÖ´Â °ÍÀÌ´Ù. ¹Ý¸é Æ÷ÀÎÅÍ´Â = ¿¬»êÀÚ·Î °¡¸®Å°´Â ´ë»óÀ» ¾ó¸¶µçÁö º¯°æÇÒ ¼ö ÀÖÀ¸¸ç ±×·¡¼­ ¼±¾ðÇÒ ¶§ ²À ÃʱâÈ­ÇÏÁö ¾Ê¾Æµµ µÈ´Ù.

 ·¹ÆÛ·±½º¿¡ ´ëÇÑ ¸ðµç ¿¬»êÀº ´ë»óü¿¡ ´ëÇÑ ¿¬»êÀ¸·Î ÇØ¼®µÈ´Ù. ±×·¡¼­ ´ÙÀ½ ¿¬»ê¹®µéÀº ¸ðµÎ ¹®¹ýÀûÀ¸·Î ÇÕ´çÇÏ´Ù.

 

int i=3,j;

int &ri=i;

int *pi;

 

ri++;

ri*=5;

j=ri >> 4;

j=ri % 2;

pi=&ri;

 

ri°¡ Á¤¼öÇü ·¹ÆÛ·±½ºÀ̹ǷΠri¿¡ ´ëÇÑ ¸ðµç ¿¬»ê¹®Àº Á¤¼öÇü¿¡ ´ëÇÑ ¿¬»êÀÌ´Ù. µû¶ó¼­ Á¤¼öÇü º¯¼ö i¿¡ ´ëÇØ »ç¿ëÇÒ ¼ö ÀÖ´Â ¸ðµç ¿¬»êÀÚ¸¦ ´Ù »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç ¿¬»êÀÇ È¿°ú´Â Á¤¼öÇü¿¡ ´ëÇÑ ¿¬»ê°ú µ¿ÀÏÇÏ´Ù. Áõ°¡, º¹ÇÕ ´ëÀÔ, ½¬ÇÁÆ®, ³ª¸ÓÁö ¿¬»ê µîÀº ¹°·ÐÀ̰í ÁÖ¼Ò ¿¬»êÀÚ &µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ¿¡ ºñÇØ Æ÷ÀÎÅÍÀÇ °æ¿ì´Â °ö¼À, ³ª¸ÓÁö, ½¬ÇÁÆ® µîÀÇ ¿¬»êÀÌ Çã¿ëµÇÁö ¾Ê´Â´Ù.

 ·¹ÆÛ·±½ºÀÇ ´ë»óü´Â ½ÇÁ¦ ¸Þ¸ð¸® ¹øÁö¸¦ Á¡À¯Çϰí ÀÖ´Â Áº¯°ªÀ̾î¾ß ÇÑ´Ù. ´ÙÀ½ ¼±¾ð¹®Àº ¿¡·¯·Î 󸮵ȴÙ.

 

int &ri=123;

 

¾Æ¹«¸® ŸÀÔÀÌ ÀÏÄ¡ÇÏ´õ¶óµµ »ó¼ö°ªÀº Áº¯°ªÀÌ ¾Æ´Ï±â ¶§¹®¿¡ ·¹ÆÛ·±½ºÀÇ ´ë»óü°¡ µÉ ¼ö ¾ø´Ù. ¸¸¾à ÀÌ ¼±¾ð¹®ÀÌ °¡´ÉÇÏ´Ù¸é ri=456; ´ëÀÔ¹®À¸·Î »ó¼ö 123ÀÌ 456À¸·Î ¹Ù²ð ¼ö ÀÖ´Ù´Â ¾ê±â°¡ µÇ¾î ¹ö¸°´Ù. ´Ü, »ó¼ö Áö½Ã ·¹ÆÛ·±½ºÀÎ °æ¿ì´Â »ó¼ö¸¦ ´ë»óü·Î ÃëÇÒ ¼ö ÀÖ´Ù.

 

const int &ri=123;

 

ÀÌ·¸°Ô µÇ¸é ri´Â 123À̶ó´Â »ó¼ö°ªÀ» °¡Áö¸ç ÀÌÈÄ ÀÌ °ªÀº º¯°æÇÒ ¼ö ¾øÀ¸¹Ç·Î Áº¯°ªÀ¸·Î »ç¿ëµÇÁö ¾Ê´Â´Ù. ÀÌ ¼±¾ð¹®Àº ÀÏ´Ü °¡´ÉÀº ÇÏÁö¸¸ ÀüÇô ½Ç¿ë¼ºÀÌ ¾ø´Ù. ¿Ö³ÄÇϸé const int ri=123;À̶ó´Â Á¤¼öÇü »ó¼ö¸¦ ¸¸µå´Â °Í°ú ¾Æ¹«·± Â÷À̰¡ ¾ø±â ¶§¹®ÀÌ´Ù.