[C++]°­ÁÂ(8)<--»õ¹®¹ý



C¿¡¼­ Æ÷ÀÎÅ͸¦ ÅëÇØ ÂüÁ¶È£ÃâÀ» ±¸ÇöÇÏ´Â ¹æ¹ý°ú´Â ±Ùº»ÀûÀ¸·Î ´Ù¸¥ ¹æ¹ýÀÌ
´Ù. Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇÑ ¹æ¹ýÀº ¹øÁö°ªÀÌ Æ÷ÀÎÅÍ·Î ³Ñ°ÜÁ® Æ÷ÀÎÅÍ¿¡ ÀÇÇØ ½ÇÀμö
°ªÀÌ º¯°æµÇÁö¸¸ C++¿¡¼­ µµÀÔµÈ ÂüÁ¶È£ÃâÀº Æ÷ÀÎÅͶó´Â Áß°£ °úÁ¤À» °ÅÄ¡Áö
¾Ê°í °ð¹Ù·Î º¯¼ö¸¦ Á¶ÀÛÇÑ´Ù.
ÂüÁ¶ÀÚ¸¦ »ç¿ëÇÑ ÂüÁ¶È£ÃâÀº Æ÷ÀÎÅͶó´Â »õ·Î¿î º¯¼ö¸¦ ¸¸µå´Â °ÍÀÌ ¾Æ´Ï¹Ç·Î
¾Æ¹«·¡µµ ¼Óµµ°¡ ´õ ºü¸¦ ¼ö¹Û¿¡ ¾ø´Ù. ¸¸¾à C¿¡¼­ ÂüÁ¶È£ÃâÀ» ±¸ÇöÇÏ·Á¸é ´Ù
À½°ú °°ÀÌ Æ÷ÀÎÅ͸¦ »ç¿ëÇÒ °ÍÀÌ´Ù.

void dubae( int *i);
dubae( &j);

Æ÷ÀÎÅ͸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀº Áß°£ °úÁ¤À» °ÅÄ¡°Ô µÇ¸ç Æ÷ÀÎÅÍ º¯¼ö°¡ ½ÇÁ¦·Î »ý
¼ºµÇÁö¸¸ ÂüÁ¶ÀÚ´Â ÀÌ¹Ì ÀÖ´Â º¯¼ö¿Í °°Àº ¸Þ¸ð¸®¸¦ °¡¸®Å°´Â °°Àº º¯¼öÀÌ´Ù.
»õ·Î¿î º¯¼ö°¡ »ý¼ºµÇ´Â °ÍÀÌ ¾Æ´Ï´Ù.

¦£¦¡¦¡¦¡¦¡¦¡¦¤
¦¢    j     ¦§¦¡¦¡¦¡¦¤
¦¦¦¡¦¡¦¡¦¡¦¡¦¥      ¦¢
                 ¦¢                                      
                ¦£¦¡¦¡¦¡¦¡¦¡¦¡¦¤         ¦£¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¤
                ¦¢     i      ¦¢         ¦¢    i,j       ¦¢
                ¦¦¦¡¦¡¦¡¦¡¦¡¦¡¦¥         ¦¦¦¡¦¡¦¡¦¡¦¡¦¡¦¡¦¥
    Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇÑ ÂüÁ¶È£Ãâ       ÂüÁ¶ÇüÀ» ÀÌ¿ëÇÑ ÂüÁ¶È£Ãâ

ÂüÁ¶ÀÚ´Â ÇÔ¼öÀÇ Àμö·Î »ç¿ëµÉ »Ó¸¸ ¾Æ´Ï¶ó ÇÔ¼öÀÇ ¸®ÅÏ°ªÀ¸·Îµµ »ç¿ëµÈ´Ù.
ÂüÁ¶ÀÚ°¡ ¸®Å쵃 ¶§ È£Ãâ¿øÀ¸·Î ¸®ÅÏµÇ¾î ¿À´Â °ÍÀº °ªÀÌ ¾Æ´Ï¶ó ¸Þ¸ð¸® ¹øÁö
¸¦ °¡Áö°í ÀÖ´Â ½Çü(=º¯¼ö ¶Ç´Â °´Ã¼)ÀÌ´Ù. ÂüÁ¶ÀÚ´Â ÃÖÃÊ ÃʱâÈ­µÉ ¶§ºÎÅÍ
´Ù¸¥ º¯¼öÀÇ ¹øÁö¸¦ °øÀ¯Çϸ鼭 ¸¸µé¾îÁö¹Ç·Î ¸Þ¸ð¸® ¹øÁö¸¦ °¡Áö°í ÀÖÀ¸¸ç µû
¶ó¼­ ¹«Á¶°Ç Áº¯°ª(lvalue)ÀÌ¸ç ´ëÀÔ½ÄÀÇ Áº¯¿¡ ³õÀ» ¼ö ÀÖ´Ù.
ÂüÁ¶ÀÚ¸¦ ¸®ÅÏÇÏ´Â ÇÔ¼ö ¶ÇÇÑ ¸¶Âù°¡Áö·Î ÇÔ¼ö È£Ãâ ±¸¹® ÀÚü°¡ Áº¯°ªÀÌ µÇ
¸ç ÇÔ¼ö°¡ ´ëÀÔ½ÄÀÇ Áº¯°ª¿¡ ³õÀÌ´Â °Íµµ °¡´ÉÇÏ´Ù. C¿¡¼­´Â Àý´ë·Î ÇÔ¼ö°¡
´ëÀÔ½ÄÀÇ Áº¯¿¡ ³õÀÌ´Â ÀÏÀÌ ¾øÀ¸¹Ç·Î óÀ½ º¸´Â »ç¶÷µé¿¡°Ô´Â ¹«Ã´À̳ª »ý¼Ò
ÇÑ ¹®¹ýÀÏ °ÍÀÌ´Ù. ´ÙÀ½ ¿¹Á¦¿¡ ÂüÁ¶ÀÚ¸¦ ¸®ÅÏÇÏ´Â ÇÔ¼ö¸¦ º¸ÀδÙ.

#include <iostream.h>

int ar[5]={ 1, 2, 3, 4, 5 };

int &getar( int n)
{
 return ar[ n];
}

void main()
{
 getar(3)=100;       // ÇÔ¼ö°¡ ½ÄÀÇ Áº¯¿¡ ³õ¿© ÀÖ´Ù.
 for ( int i = 0; i < 5; i ++)
     cout << i << " : " << ar[ i] << endl;
}

Àü¿ª ¹è¿­ arÀÌ ¼±¾ðµÇ¾î ÀÖ°í ÷ÀÚ nÀ» Àμö·Î ÁÖ¸é ar[ n]À» ¸®ÅÏÇÏ´Â ÇÔ¼ö
getarÀÌ ¼±¾ðµÇ¾î ÀÖ´Ù. main ÇÔ¼öÀÇ Ã¹ Çà¿¡¼­ ar[3]¿¡ 100À» ´ëÀÔÇϱâ À§ÇØ
getar(3) = 100; À̶ó´Â ´ëÀÔ½ÄÀ» »ç¿ëÇÏ¿´´Âµ¥ ¹º°¡ ºÒ¾ÈÇØ º¸ÀÌ°í ¾î»öÇØ º¸
ÀÌÁö¸¸ ÀüÇô ¹®Á¦°¡ ¾ø´Â Á¤»óÀûÀÎ ´ëÀÔ½ÄÀÌ´Ù. ÀÌ ´ëÀԽĿ¡ ÀÇÇØ ar[3]Àº 100
À¸·Î ¹Ù²î°Ô µÇ¸ç ar ¹è¿­Àº ´ÙÀ½°ú °°ÀÌ º¯ÇÏ°Ô µÈ´Ù.

0 : 1
1 : 2
2 : 3
3 : 100
4 : 5

getar(3)ÀÌ ¸®ÅÏÇÏ´Â °ÍÀº ar[3]ÀÇ °ªµµ ¾Æ´Ï°í, ±×·¸´Ù°í ar[3]ÀÇ ¹øÁöµµ ¾Æ
´Ï¸ç ar[3] º¯¼ö ±× ÀÚü¸¦ ¸®ÅÏÇÑ´Ù. ¸®ÅϵǴ ÂüÁ¶ÀÚ´Â ar[3]ÀÇ º°ÄªÀ̸ç Âü
Á¶ÀÚ¿¡ ¾î¶² Á¶ÀÛÀ» °¡ÇÏ´Â °ÍÀº °ð ar[3]¿¡ ¾î¶² Á¶ÀÛÀ» °¡ÇÏ´Â °Í°ú µ¿ÀÏÇÑ
È¿°ú¸¦ °¡Á®¿À°Ô µÈ´Ù.

¦£¦¡¦¡¦¡¦¡¦¨¦¡¦¡¦¡¦¡¦¨¦¡¦¡¦¡¦¡¦¨¦¡¦¡¦¡¦¡¦¨¦¡¦¡¦¡¦¡¦¤
¦¢  ar[0] ¦¢ ar[1]  ¦¢ ar[2]  ¦¢ ar[3]  ¦¢ ar[4]  ¦¢
¦¦¦¡¦¡¦¡¦¡¦ª¦¡¦¡¦¡¦¡¦ª¦¡¦¡¦¡¦¡¦ª¦¡¦¨¦¡¦¡¦ª¦¡¦¡¦¡¦¡¦¥
                                 ¦¢
getar(3):º¯¼ö ÀÚü¸¦    ¦¡¦¡¦¡¦¡¦¡¦¥
 ¸®ÅÏÇØ ÁØ´Ù.

´Ü ÂüÁ¶ÀÚ´Â Áö¿ª º¯¼ö¸¦ ¸®ÅÏÇÒ ¼ö´Â ¾ø´Ù.

int & func( void)
{
 int i = 3;
 return i;     // ¿©±â¼­ ¿¡·¯ ¹ß»ý
}

Áö¿ª º¯¼ö¸¦ ¸®ÅÏÇÒ ¼ö ¾ø´Â ÀÌÀ¯´Â ÂüÁ¶ÀÚ°¡ º¯¼ö¸¦ ¸®ÅÏÇÏ´Â ½ÃÁ¡¿¡¼­ ÇÔ¼ö
°¡ Á¾·áµÇ°í ÇÔ¼ö ³»ºÎ¿¡¼­ ¼±¾ðµÈ Áö¿ª º¯¼öÀÇ »ý¸íÀÌ ³¡³ª±â ¶§¹®¿¡ ÂüÁ¶ÀÚ
°¡ ¸®ÅÏÇÏ´Â °ªÀÌ È£Ãâ¿ø¿¡¼­´Â ¾Æ¹«·± Àǹ̰¡ ¾ø±â ¶§¹®ÀÌ´Ù.
¾ÆÁ÷µµ ÂüÁ¶ÀÚ°¡ Àß ÀÌÇØ°¡ ¾È °¡´Â »ç¶÷Àº ¸Ó¸® ¼ÓÀ¸·Î »ó»ó·ÂÀ» Ãѵ¿¿øÇÏ¿©
ÄÄÆÄÀÏ·¯ÀÇ µ¿ÀÛ°ú ¿¹Á¦ÀÇ µ¿ÀÛÀ» ÃÑüÀûÀ¸·Î ºÐ¼®Çغ¸´Â ¼ö¹Û¿¡ ¾ø´Ù. ³ªÁß¿¡
class¸¦ °øºÎÇÒ ¶§ ÂüÁ¶ÀÚ´Â ¹ä¸ÔµíÀÌ ÀÚÁÖ ³ª¿À¹Ç·Î È®½ÇÇÏ°Ô ¾Ë¾ÆµÎ´Â °ÍÀÌ
ÁÁ´Ù. C¸¦ óÀ½ °øºÎÇÏ´Â »ç¶÷ÀÌ Á¦ÀÏ ¾Ö¸¦ ¸¹ÀÌ ¸Ô´Â ºÎºÐÀÌ Æ÷ÀÎÅÍÀÌ´Ù. C++
À» óÀ½ °øºÎÇÏ´Â »ç¶÷ÀÌ Á¦ÀÏ ¸ÕÀú Åë°úÇØ¾ß ÇÒ °ü¹®Àº ÂüÁ¶ÀÚÀÌ´Ù. Á»´õ Àå
±â°£ÀÇ ½Ã°£À» ÅõÀÚÇÏ¿© °øºÎÇÒ ÇÊ¿ä°¡ ÀÖ´Â ºÎºÐÀ̹ǷΠ³Ê¹« Á¶±ÞÇÑ ¸¶À½À»
°¡Áú ÇÊ¿ä´Â ¾ø´Ù. ¹«Á¶°Ç ¿Ü¿ö ¹ö¸®°í ³ª¸é ¾î´À³¯ ÇÁ·Î±×·¡¹ÖÇÏ´ø µµÁß¿¡ ¿Ï
ÀüÈ÷ ÀÌÇØÇÏ°Ô µÇ´Â ³¯ÀÌ ÀÖÀ» °ÍÀÌ´Ù.

³ª. scope ¿¬»êÀÚ

C¿¡¼­´Â scope ruleÀ̶ó´Â °ÍÀÌ ÀÖ¾î º¯¼öÀÇ Åë¿ëµÇ´Â ¹üÀ§¿¡ °üÇÑ ±ÔÁ¤À» ÇÏ
°í ÀÖ´Ù(6ÀåÂüÁ¶). ¿øÄ¢ÀûÀ¸·Î °°Àº Åë¿ë ¹üÀ§¿¡ °°Àº À̸§ÀÇ º¯¼ö°¡ µÎ °³ °°
ÀÌ Á¸ÀçÇÒ ¼ö ¾øÁö¸¸ ¹üÀ§°¡ ´Ù¸¥ °æ¿ì¿¡´Â ¹üÀ§°¡ Á¼Àº º¯¼ö¿¡ ¿ì¼± ¼øÀ§¸¦
ÁØ´Ù. Áï Áö¿ª º¯¼ö¿Í Àü¿ª º¯¼ö°¡ À̸§ÀÌ °°À» ¶§ ÇÔ¼ö ³»ºÎ¿¡¼­´Â Àü¿ª º¯¼ö
¸¦ Àá½Ã ÀνÄÇÏÁö ¸øÇϸç Áö¿ª º¯¼ö¸¸À» ÀνÄÇÑ´Ù. C¿¡¼­ ÀÌ·± ¹®Á¦¸¦ ÇØ°áÇÏ
±â À§Çؼ­´Â Àü¿ª º¯¼öµç Áö¿ª º¯¼öµç µÑ Áß ÇÑ º¯¼öÀÇ À̸§À» ´Ù¸¥ À̸§À¸·Î
¹Ù²Ù¾î ÁÖ¾î¾ß¸¸ ÇÑ´Ù.
C++¿¡¼­´Â ¿©±â¿¡ »õ·Î¿î ¿¬»êÀÚ¸¦ ÷°¡ÇÏ¿© ÇÔ¼ö ³»ºÎ¿¡¼­ Àü¿ª º¯¼ö¸¦ ÂüÁ¶
ÇÒ¼ö ÀÖµµ·Ï ÇÏ°í Àִµ¥ ÀÌ ¿¬»êÀÚ°¡ scope ¿¬»êÀÚ(¹üÀ§ ¿¬»êÀÚ)À̸ç colonÀ»
µÎ °³ ¿¬¼ÓÀûÀ¸·Î ºÙ¿©¼­ Ç¥±âÇÑ´Ù(:: ¿ä·¸°Ô) ÀÏ´Ü ¿¹Á¦¸¦ ÅëÇØ scope ¿¬»êÀÚ
ÀÇ È°¾àÀ» º¸ÀÚ.

#include <iostream.h>

void func( void);
int i;

void main()
{
 i = 3;
 func();
 cout << "here main i= " << i << endl;   // Àü¿ª º¯¼ö i ÂüÁ¶
}

void func( void)
{
 int i;
 i = 4;
 cout << "func's i=" <<  i << endl;  // Áö¿ª º¯¼ö i ÂüÁ¶
 cout << "global i=" << ::i << endl;  // Àü¿ª º¯¼ö i ÂüÁ¶
}

Àü¿ª º¯¼ö·Î i°¡ ¼±¾ðµÇ¾î ÀÖ°í func ÇÔ¼ö ³»ºÎ¿¡¼­ ¶Ç Áö¿ª º¯¼ö·Î i°¡ ¼±¾ð
µÇ¾î ÀÖ´Ù.
func ÇÔ¼ö ¹Û¿¡¼­ i¸¦ ÂüÁ¶Çϸé Àü¿ª º¯¼ö i°¡ ÂüÁ¶µÇ°í func ÇÔ¼ö ³»ºÎ¿¡¼­
´Â Áö¿ª º¯¼ö i°¡ ÂüÁ¶µÈ´Ù.
func ÇÔ¼ö ³»ºÎ¿¡¼­ Àü¿ª º¯¼ö i¸¦ ÂüÁ¶ÇÏ°íÀÚ ÇÒ ¶§ scope ¿¬»êÀÚ¸¦ º¯¼ö ¾Õ
¿¡ ºÙ¿©ÁÖ¸é µÈ´Ù. func ÇÔ¼ö ³»ºÎÀÇ µÎ¹ø° printf¹®¿¡¼­ »ç¿ëÇÑ ::i´Â Àü¿ª
º¯¼ö i¸¦ ÀǹÌÇϸç ù¹ø° printf¹®¿¡¼­ »ç¿ëµÈ i´Â Áö¿ª º¯¼ö i¸¦ ÀǹÌÇÑ´Ù.
¶ÇÇÑ ÀÌ scope ¿¬»êÀÚ´Â class¿Í º¯¼ö »çÀÌ¿¡ À§Ä¡ÇØ º¯¼ö ¶Ç´Â ÇÔ¼ö°¡ ¾î´À
class ¼Ò¼ÓÀÎÁö¸¦ ¹àÇôÁÖ´Â ¿ëµµ·Îµµ »ç¿ëµÈ´Ù.

´Ù. new, delete

±âÁ¸ÀÇ C ¹®¹ý¿¡¼­´Â µ¿Àû ¸Þ¸ð¸®ÀÇ ÇÒ´ç°ú ÇØÁ¦¿¡ malloc, free µîÀÇ ÇÔ¼ö¸¦
»ç¿ëÇÏ¿´´Ù.
ÀÌ·¯ÇÑ ÇÔ¼ö´Â ±¸Á¶Àû ÇÁ·Î±×·¡¹Ö ¹æ½Ä¿¡´Â ÀûÇÕÇÏÁö¸¸ OOPÀûÀÎ ¹æ½Ä¿¡¼­´Â
´Ù¼Ò ÇÑ°è°¡ Àֱ⠶§¹®¿¡ C°¡ C++·Î È®ÀåµÇ¸é¼­ »õ·Î¿î ÇüÅÂÀÇ µ¿Àû ¸Þ¸ð¸® °ü
¸® ¹æ¹ýÀÌ Á¦±âµÇ¾ú´Ù.
C++¿¡¼­´Â µ¿Àû ¸Þ¸ð¸® °ü¸®¿¡ ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾Ê°í ¿¬»êÀÚÀÇ ÇüÅ·ΠÁ¦°øÇÏ
´Âµ¥ ÀÌ ¿¬»êÀÚ°¡ ¹Ù·Î new, delete ¿¬»êÀÚÀÌ´Ù. ÀÌ ¿¬»êÀÚµéÀº malloc, free
µîÀÇ ÇÔ¼öµéº¸´Ù Áøº¸µÈ ¹æ½ÄÀ¸·Î µ¿Àû ¸Þ¸ð¸®¸¦ °ü¸®ÇÑ´Ù. ÀÌ ¿¬»êÀÚµéÀÌ °¡
Áö´Â ¿©·¯ °¡Áö ÀåÁ¡µéÀ» »ìÆ캸¸é OOPÀûÀÎ ÇÁ·Î±×·¥ ¹æ½Ä¿¡ ÀûÇÕÇÑ ±â´ÉÀ» °¡
Áö°í ÀÖÀ½À» ¾Ë ¼ö ÀÖ´Ù. ÀÏ´Ü ÀÌ ¿¬»êÀÚµéÀ» »ç¿ëÇÏ¿© µ¿Àû ¸Þ¸ð¸®¸¦ °ü¸®ÇÏ
°Ô µÇ¸é »ç¿ëÇϱⰡ °£ÆíÇÒ »Ó¸¸ ¾Æ´Ï¶ó ¼Ò½º¸¦ ÀбⰡ ´õ ½¬¿öÁø´Ù. ¶ÇÇÑ ³»
ºÎÀûÀ¸·Î 󸮵Ǵ ¼Óµµµµ mallocµîÀÇ ÇÔ¼öµéº¸´Ù ´õ ºü¸£´Ù.
±×¸®°í ÇÔ¼ö°¡ ¾Æ´Ñ ¿¬»êÀÚÀ̱⠶§¹®¿¡ º°µµÀÇ Çì´õ ÆÄÀÏÀ» Æ÷ÇÔ½Ãų ÇÊ¿ä°¡
¾øÀ¸¸ç ¿¬»êÀÚ ¿À¹ö·ÎµùÀ» ÅëÇØ ÀÚ½ÅÀÌ ¿øÇÏ´Â ÇüÅ·Πº¯°æ½ÃÅ°´Â °Íµµ °¡´ÉÇÏ
´Ù. new¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© µ¿Àû ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ´Â ±âº» ¹®¹ýÀ» º¸ÀÚ.


À̾ °è¼ÓµË´Ï´Ù. ==============>>>>>>>


--------------------------------------------------------------------------------