ÀÌÀü | ´ë¹® | ¿µ¾î
C++ ÀÇ ¼Ò¸êÀÚ´Â ÀÚµ¿À¸·Î ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù.
C++ ÀÇ ¼Ò¸êÀÚ´Â ÀÚµ¿À¸·Î ÀÛµ¿ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, ¾Ï¹¬Àû(implicitly)À¸·Î
È£ÃâµÇ¸ç, °èÃþÀû (hierarchically)À¸·Î È£ÃâµÈ´Ù. ±×°ÍÀÌ ¾²·¹±â ¼öÁý±â
(GC, Garbage Collector)°¡ ¾Æ´Ñ ÀÌ»ó ÀÚµ¿À¸·Î ÀÛµ¿ÇÑ´Ù°í º¼ ¼ö ¾ø´Ù.
¸¶Ä¡ ÀÚµ¿À¸·Î ÀÛµ¿ÇÏ´Â °Íó·³ º¸ÀÌ´Â Àü¿ª °³Ã¼³ª Áö¿ª°³Ã¼ÀÇ ¼Ò¸êÀÚµéÀº
¸ðµÎ, ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ °³Ã¼°¡ ÇØ´ç scope ¸¦ ¹þ¾î³ª´Â ½ÃÁ¡¿¡¼
¾Ï¹¬ÀûÀ¸·Î È£ÃâµÈ´Ù. ¸¸ÀÏ ¼Ò¸êÀÚ°¡ ¾ø´Â ¾ð¾î·Î
µ¿ÀÏÇÑ ·çƾÀ» ÀÛ¼ºÇÑ´Ù¸é scope ¿¡ ÀÇÇØ ¸íÈ®È÷ µå·¯³ª´Â ¼Ò¸ê ½ÃÁ¡¿¡¼
ÀûÀýÈ÷ ¼Ò¸êÀÚ¿¡ ÇØ´çÇÏ´Â ÇÔ¼ö¸¦ È£ÃâÇØÁÖ¸é µÈ´Ù.
¶§·Î´Â ÀÌ·¯ÇÑ ¾Ï¹¬ÀûÀÎ »ý¼ºÀÚ/¼Ò¸êÀÚ È£ÃâÀÌ ¼º´É ¹®Á¦¿Í ¿¬°áµÇ±âµµ ÇÑ´Ù.
{
for( i=0; i<n; i++ ) {
MyObject object;
object.doSomething();
// destructor for 'object' is implicitly called here
}
}
¸¸ÀÏ ÀÌ ·çƾÀ» ÇØ´ç °³Ã¼ÀÇ Æ¯¼º¿¡ µû¶ó ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÒ ¼ö
ÀÖ´Ù¸é ¼º´ÉÀº Áõ°¡ÇÒ ¼ö ÀÖ´Ù.
{
MyObject object;
for( i=0; i<n; i++ ) {
object.doSomething();
}
// destructor for 'object' is implicitly called here
}
ÃÖÀûÈ ÄÄÆÄÀÏ·¯°¡ MyObject ÀÇ »ý¼ºÀÚ¿Í ¼Ò¸êÀÚ¸¦ ·çÇÁ ¹ÛÀ¸·Î º¸³»µµ µÇ´ÂÁö
ÆÇ´ÜÇÒ ¼ö ÀÖÀ»¸¸Å ¶È¶ÈÇØÁ®ÀÖÁö ¾Ê´Ù. ¶ÇÇÑ »ý¼ºÀÚ ¼Ò¸êÀÚ È£ÃâÀÌ ¾Ï¹¬ÀûÀ¸·Î
ÇàÇØÁö´Â C++ °°Àº ¾ð¾î´Â °³¹ßÀÚ°¡ À§¿Í °°Àº ÆÇ´ÜÀ» ÇÏ´Â °ÍÀ» ¹æÇØÇÑ´Ù.
Àü¿ª °³Ã¼³ª Áö¿ª °³Ã¼ÀÇ »ý¼º°ú ¼Ò¸ê ¹®Á¦´Â ÀÌ ±Û¿¡¼ ´Ù·ç·Á´Â
¼Ò¸êÀÚ ¹®Á¦ÀÇ ÇÙ½ÉÀÌ ¾Æ´Ï´Ù. new ¿¡ ÀÇÇØ µ¿ÀûÇÒ´çµÇ´Â °³Ã¼¸¦ ¼Ò¸ê½Ã۱â
À§Çؼ´Â ºÐ¸íÈ÷ ¾î´À ½ÃÁ¡¿¡¼ °³¹ßÀÚ°¡ delete ¸¦ È£ÃâÇØÁÖ¾î¾ß ÇÑ´Ù.
À̰ÍÀº delete °¡ ¾ø´Â ¾ð¾î¿¡¼, °³Ã¼¸¦ ¼Ò¸ê½ÃŰ´Â ÇÔ¼ö¸¦ ¸¸µé°í ±×°ÍÀ»
ÀûÀýÇÑ ½ÃÁ¡¿¡¼ È£ÃâÇØ¾ß ÇÏ´Â °Í°ú ´Ù¸¦ ¹Ù ¾ø´Â »óȲÀÌ µÈ´Ù.
¸¸ÀÏ, '¼Ò¸êÀÚ°¡ ÀÚµ¿À¸·Î ÀÛµ¿ÇÑ´Ù'¶ó´Â ¸»ÀÌ C++ ÀÇ ¾ð¾îÀû Ư¼º¿¡
´ëÇÑ È¯»óÀ» Áشٸé, C++ À» Àß ¸ø ÀÌÇØÇÒ ÃæºÐÇÑ °¡´É¼ºÀ» Á¦°øÇØ ÁÙ °ÍÀÌ´Ù.
ÀÌ ±ÛÀº ¾ð¾î ³íÀïÀ» À¯¹ßÇÏ·Á´Â Àǵµ·Î ¾´ ±ÛÀÌ °áÄÚ ¾Æ´Ï´Ù. ´ÜÁö,
C++ ¼Ò¸êÀÚÀÇ ÀÛµ¿ ¹æ½ÄÀ» Á» ´õ ÀûÀýÇÏ°Ô ¹¦»çÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ ÀǰßÀ»
Á¦½ÃÇÑ °Í »ÓÀÌ´Ù. ³ª´Â C ¸¦ ÁÖ °³¹ß ¾ð¾î·Î »ç¿ëÇÏÁö¸¸, C++ µµ ÁÁ¾ÆÇÑ´Ù.
»Ó¸¸¾Æ´Ï¶ó Assembly, JAVA ³ª C#, ³ª¾Æ°¡ ¸ðµç ÇÁ·Î±×·¥ ¾ð¾îµéÀ» ÁÁ¾ÆÇÑ´Ù.
±×°ÍµéÀº ¸ðµÎ ³»°¡ ¿øÇÏ´Â ¸ñÀûÀ» ¾òÀ» ¼ö ÀÖÀ» Á¤µµÀÇ ÃæºÐÇÑ ±â´ÉµéÀ» °¡Áö°í
Àֱ⠶§¹®ÀÌ´Ù.
2007.03.30 ½ÃÀÛ
ÀÌÀü | ´ë¹® | ¿µ¾î