¿¹¿Ü 󸮴 ưưÇÑ ÇÁ·Î±×·¥À» ¸¸µé±â À§ÇØ ¾îÂ÷ÇÇ ÇÊ¿äÇ쵂 Çü½Ä¼ºÀ» Á» °®Ãâ Çʿ䰡 ÀÖ´Ù. ÀÌ·± Çʿ伺Àº ¾ÆÁÖ ¿À·¡ ÀüºÎÅÍ ÀÎ½ÄµÇ¾î ¿Ô°í ±×µ¿¾È ¸¹Àº ¿¹¿Ü ó¸® ¹æ¹ýµéÀÌ °³¹ßµÇ¾ú´Ù. ÀüÅëÀûÀÎ C ¶óÀ̺귯¸®µµ setjmp, longjmp¶ó´Â ÇÔ¼ö°¡ ÀÖ°í À©µµ¿ìÁî´Â ¿î¿µÃ¼Á¦ Â÷¿ø¿¡¼ ±¸Á¶ÀûÀÎ ¿¹¿Ü ó¸® ±â¹ý(SEH)À» Á¦°øÇϸç ÀÌ ±â¹ýÀº ºñÁÖ¾ó C++ ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ ±¸ÇöµÇ¾ú´Ù. ¶ÇÇÑ MFC ¶óÀ̺귯¸®´Â ¿¹¿Ü¸¦ ó¸®ÇÏ´Â CException°ú ÆÄ»ý Ŭ·¡½º¸¦ Á¦°øÇϱ⵵ ÇÑ´Ù.
C++Àº ÇÔ¼ö³ª ÄÄÆÄÀÏ·¯, ¶óÀ̺귯¸® ¼öÁØÀÌ ¾Æ´Ñ ¾ð¾î Â÷¿ø¿¡¼ »õ·Î¿î ¿¹¿Ü ó¸® ¹®¹ýÀ» Á¦°øÇÑ´Ù. ¾ð¾î°¡ Á¦°øÇÏ´Â ±â´ÉÀ̱⠶§¹®¿¡ ±âÁ¸ ¹æ¹ý¿¡ ºñÇØ Á» ´õ À¯¿¬Çϰí Ŭ·¡½º¸¦ ÀνÄÇϹǷΠÀûÀýÇÑ ½ÃÁ¡¿¡ ÆÄ±«ÀÚ¸¦ È£ÃâÇÏ¿© ±ò²ûÇÏ°Ô ¿¹¿Ü¸¦ ó¸®ÇÒ ¼ö ÀÖ´Ù. C++ÀÇ ¿¹¿Ü ó¸® ¹®¹ýÀº ´ÙÀ½ ¼¼ Ű¿öµå·Î Áö¿øµÈ´Ù.
¡á try : ¿¹¿Ü°¡ ¹ß»ýÇÒ¸¸ÇÑ ÄÚµå ºí·ÏÀ» ÁöÁ¤Çϴµ¥ try ´ÙÀ½ÀÇ { } °ýÈ£¾È¿¡ ¿¹¿Ü ó¸® ´ë»ó Äڵ带 ÀÛ¼ºÇÑ´Ù. ÀÌ ºí·Ï ¾È¿¡¼ ¿¹¿Ü°¡ ¹ß»ýÇßÀ» ¶§ throw ¸í·ÉÀ¸·Î ¿¹¿Ü¸¦ ´øÁø´Ù.
¡á throw : ÇÁ·Î±×·¥ÀÌ Á¤»óÀûÀ¸·Î ½ÇÇàµÉ ¼ö ¾ø´Â »óȲÀÏ ¶§ ÀÌ ¸í·ÉÀ¸·Î ¿¹¿Ü¸¦ ´øÁø´Ù. throw ´ÙÀ½¿¡ ´øÁö°íÀÚ ÇÏ´Â ¿¹¿Ü¸¦ Àû´Â´Ù. ¿¹¿Ü¸¦ ´øÁø´Ù´Â °ÍÀº ¿¹¿Ü°¡ ¹ß»ýµÇ¾ú´Ù´Â °ÍÀ» ¾Ë¸®¸ç ÀÌ ¿¹¿Ü¸¦ ó¸®ÇÏ´Â catch¹®À¸·Î Á¡ÇÁÇϵµ·Ï ÇÑ´Ù. throw ¸í·É ¾Æ·¡ÂÊÀÇ ÄÚµåµéÀº ¸ðµÎ ¹«½ÃµÇ¸ç °ð¹Ù·Î ¿¹¿Ü ó¸® ±¸¹®À¸·Î À̵¿ÇÑ´Ù.
¡á catch : try ºí·Ï ´ÙÀ½¿¡ À̾îÁö¸ç ´øÁ®Áø ¿¹¿Ü¸¦ ¹Þ¾Æ¼ ó¸®ÇÑ´Ù. ±×·¡¼ catch ºí·ÏÀ» ¿¹¿Ü Çڵ鷯¶ó°í ºÎ¸¥´Ù. catch ´ÙÀ½¿¡´Â ¹Þ°íÀÚ ÇÏ´Â ¿¹¿ÜÀÇ Å¸ÀÔÀ» Àû´Âµ¥ ÀÌ °´Ã¼´Â throw¿¡ ÀÇÇØ ´øÁ®Áø´Ù. catch ºí·Ï¿¡´Â ¿¹¿Ü¸¦ ó¸®ÇÏ´Â Äڵ尡 ÀÛ¼ºµÈ´Ù.
°¡Àå °£´ÜÇÑ ¿¹¿Ü ó¸® ±¸¹®ÀÇ ¿¹´Â ´ÙÀ½°ú °°´Ù.
try {
if (¿¹¿Ü Á¶°Ç) throw ¿¹¿Ü °´Ã¼;
}
catch (¿¹¿Ü °´Ã¼) {
¿¹¿Ü ó¸®
}
try ºí·Ï ¾È¿¡¼ ¾î¶² ¿¬»êÀ» Çϴµ¥ ¿¬»êÁß¿¡ ¿¡·¯°¡ ¹ß»ýÇϸé throw·Î ¿¹¿Ü¸¦ ´øÁö¸ç catch°¡ ÀÌ ¿¹¿Ü¸¦ ¹Þ¾Æ ó¸®ÇÑ´Ù. tryºí·Ï°ú catch´Â ÇÑ ½ÖÀ̹ǷΠ¹Ýµå½Ã ¿¬¼ÓÀûÀ¸·Î ¹èÄ¡µÇ¾î¾ß Çϸç Áß°£¿¡ ´Ù¸¥ ¹®ÀåÀÌ ³¢¾îµé¾î¼´Â ¾ÈµÈ´Ù. ´ÙÀ½ ¿¹Á¦´Â ÁÂÇ¥¿Í ¼ýÀÚ¸¦ ÀÔ·Â¹Þ¾Æ ÁöÁ¤ÇÑ ÁÂÇ¥¿¡ ¼ýÀÚÀÇ Á¦°ö±ÙÀ» Ãâ·ÂÇϴµ¥ ÀüÅëÀûÀÎ ¹æ¹ýÀ¸·Î ¿¹¿Ü¸¦ ó¸®Çß´Ù.
|
¿¹ Á¦ : ifexcept |
#include <Turboc.h>
#include <math.h>
void main()
{
int x,y,r;
printf("x ÁÂÇ¥ ÀÔ·Â : ");scanf("%d",&x);
if (x < 0) {
printf("%d´Â À½¼öÀ̹ǷΠÀ߸øµÈ °ªÀÔ´Ï´Ù.\n",x);
exit(-1);
}
printf("y ÁÂÇ¥ ÀÔ·Â : ");scanf("%d",&y);
if (y < 0) {
printf("%d´Â À½¼öÀ̹ǷΠÀ߸øµÈ °ªÀÔ´Ï´Ù.\n",y);
exit(-1);
}
printf("¼ýÀÚ ÀÔ·Â : ");scanf("%d",&r);
if (r < 0) {
printf("%d´Â À½¼öÀ̹ǷΠÀ߸øµÈ °ªÀÔ´Ï´Ù.\n",r);
exit(-1);
}
gotoxy(x,y);
printf("%dÀÇ Á¦°ö±ÙÀº %.4fÀÔ´Ï´Ù\n",r,sqrt(r));
}
ȸé»óÀÇ ÁÂÇ¥´Â ´ç¿¬È÷ ¾ç¼ö¿©¾ß ÇÑ´Ù. ±×¸®°í À½¼öÀÇ Á¦°ö±ÙÀº Á¸ÀçÇÏÁö ¾ÊÀ¸¹Ç·Î ¹Ýµå½Ã ¾ç¼ö°ª¸¸ ÀÔ·Â¹Þ¾Æ¾ß ÇÑ´Ù. ÀÌ·± ±ÔÄ¢À» Á¡°ËÇϱâ À§ÇØ ¸Å °ªÀ» ÀԷ¹ÞÀ» ¶§¸¶´Ù if¹®À¸·Î °ªÀÇ ºÎÈ£¸¦ Á¡°ËÇϰí À½¼ö°¡ ÀԷµǾúÀ» ¶§´Â ¿¡·¯ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ ÈÄ ÇÁ·Î±×·¥À» Á¾·áÇϵµ·Ï Çß´Ù. ÇÁ·Î±×·¥ÀÇ ¾ÈÀü¼ºÀ» À§ÇØ ²À ÇÊ¿äÇÑ ¿¡·¯ ó¸®À̱â´Â ÇÏÁö¸¸ ¶È°°Àº Äڵ尡 °è¼Ó ¹Ýº¹µÇ¾î ¿ë·®À» ³¶ºñÇϰí ÀÖ´Ù. ¶ÇÇÑ ÇÁ·Î±×·¥ÀÇ °íÀ¯ Äڵ庸´Ù ¿¡·¯¸¦ ó¸®ÇÏ´Â Äڵ尡 ´õ ±æ¾î º¸±â¿¡µµ ÁÁÁö ¾Ê´Ù. ÀÌ ÇÁ·Î±×·¥À» C++ÀÇ ¿¹¿Ü ó¸® ±¸¹®À¸·Î ¹Ù²Ù¸é ´ÙÀ½°ú °°ÀÌ Á¤¸®ÇÒ ¼ö ÀÖ´Ù.
|
¿¹ Á¦ : trycatch |
#include <Turboc.h>
#include <math.h>
void main()
{
int x,y,r;
try {
printf("x ÁÂÇ¥ ÀÔ·Â : ");scanf("%d",&x);
if (x < 0) throw x;
printf("y ÁÂÇ¥ ÀÔ·Â : ");scanf("%d",&y);
if (y < 0) throw y;
printf("¼ýÀÚ ÀÔ·Â : ");scanf("%d",&r);
if (r < 0) throw r;
}
catch(int a) {
printf("%d´Â À½¼öÀ̹ǷΠÀ߸øµÈ °ªÀÔ´Ï´Ù.\n",a);
exit(-1);
}
gotoxy(x,y);
printf("%dÀÇ Á¦°ö±ÙÀº %.4fÀÔ´Ï´Ù\n",r,sqrt(r));
}
¿¹¿Ü°¡ ¹ß»ýÇÒ °¡´É¼ºÀÌ ÀÖ´Â ÀԷ¹®µéÀ» ¸ðµÎ try·Î µÑ·¯½Î°í try ºí·Ï ¾È¿¡¼ À߸øµÈ °ªÀÌ ÀÔ·ÂµÉ ¶§¸¶´Ù throw·Î ÀÔ·ÂµÈ Á¤¼ö°ªÀ» ´øÁö±â¸¸ Çß´Ù. throw°¡ ¿¡·¯¸¦ À¯¹ß½ÃŲ Á¤¼ö¸¦ ´øÁö¸é try ºí·Ï ´ÙÀ½ÀÇ catch¿¡¼ ÀÌ Á¤¼ö¸¦ ¹Þ¾Æ ¿¡·¯ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇϰí exit(-1)·Î(¶Ç´Â returnÀ¸·Î) ÇÁ·Î±×·¥À» Á¾·áÇÑ´Ù. À̶§ tryºí·ÏÀÇ throw ¾Æ·¡¿¡ ÀÖ´Â ÄÚµå´Â ¹«½ÃµÇ´Âµ¥ ÇÑ °ªÀÌ À߸ø ÀԷµǾúÀ¸¸é ´ÙÀ½ °ªÀº ÀԷ¹ÞÀ» Çʿ䰡 ¾ø±â ¶§¹®ÀÌ´Ù. ¼øÂ÷ÀûÀ¸·Î ½ÇÇàµÇ´Â ÄÚµå È帧¿¡¼ ¾Õ ºÎºÐÀÌ À߸øµÇ¸é ÀϹÝÀûÀ¸·Î µÞ ºÎºÐÀÇ Äڵ嵵 Á¦´ë·Î µ¿ÀÛÇÏÁö ¾Ê´Â´Ù.
¸¸¾à ¿¹¿Ü°¡ ¹ß»ýÇÏÁö ¾ÊÀ¸¸é catch ºí·Ï¿¡ ÀÖ´Â ¿¹¿Ü ó¸® ÄÚµå´Â ½ÇÇàµÇÁö ¾Ê°í ¹«½ÃµÈ´Ù. ¸ðµç °ªÀÌ ´Ù ¾ç¼ö·Î ÀԷµǾú´Ù¸é ¿¹¿Ü°¡ ¹ß»ýÇÏÁö ¾ÊÀ¸¸ç À̶§´Â (x, y) À§Ä¡¿¡ sqrt(r) °ªÀ» Á¤»óÀûÀ¸·Î Ãâ·ÂÇÒ ¼ö ÀÖ´Ù. ¶È°°ÀÌ ¹Ýº¹µÇ´Â ¿¡·¯ ó¸® Äڵ带 ÇÑ °÷¿¡ ¸ðÀ» ¼ö ÀÖ¾î Äڵ尡 ª¾ÆÁö¸ç ¿¡·¯ ó¸® ±¸¹®°ú °íÀ¯ÀÇ Ã³¸® Äڵ尡 ºÐ¸®µÇ¾î¼ Àб⿡µµ ÁÁ´Ù.
catch ºí·Ï ¾ÈÀÇ ÄÚµå´Â ¿¹¿Ü°¡ ¹ß»ýÇÒ ¶§¸¸ ½ÇÇàµÇ¸ç ¿À·ÎÁö throw¿¡ ÀÇÇØ¼¸¸ À̵¿ °¡´ÉÇÏ´Ù. ¾Æ¹«¸® À߸øµÈ ¹®ÀåÀÌ¶óµµ ¿¡¿Ü°¡ ÀÚµ¿À¸·Î ¹ß»ýÇÏ´Â ¹ýÀº ¾øÀ¸¹Ç·Î throw·Î ´øÁú ¶§¸¸ ¿¹¿Ü°¡ ¹ß»ýÇϸç catchºí·ÏÀº ¿¹¿Ü°¡ ¹ß»ýÇÒ ¶§¸¸ È£ÃâµÈ´Ù. goto³ª return ±âŸ Á¦¾î¸¦ ¿Å±â´Â ¸í·ÉÀ¸·Î´Â catch ¾ÈÀ¸·Î À̵¿ÇÏÁö ¸øÇÏ¸ç ¹Ýµå½Ã throw·Î¸¸ Á¦¾î¸¦ ¿Å±æ ¼ö ÀÖ´Ù. ¹Ý¸é catch¹® ¾È¿¡¼´Â goto, return, break, continue µîÀÇ ¸í·Éµé·Î ºí·Ï ¹ÛÀ¸·Î À̵¿ÇÒ ¼ö ÀÖ´Ù.

catchÀÇ ÄÚµå´Â Àß ¹ß»ýÇÏÁö ¾Ê´Â ºñÁ¤»óÀûÀÎ »óȲÀ» ó¸®ÇÏ´Â °ÍÀ̹ǷΠÇÁ·Î±×·¥ÀÇ ³í¸®¿Í´Â Å« »ó°üÀÌ ¾ø´Ù. ¿¹¸¦ µé¾î ÇÏµå µð½ºÅ©°¡ °¡µæ á´Ù°Å³ª ³×Æ®¿öÅ© Ä«µå°¡ °©ÀÛ½º·´°Ô °íÀå³ »óȲÀ» µé ¼ö Àִµ¥ ¹ß»ý ºóµµ°¡ Áö±ØÈ÷ ³·±â´Â ÇÏÁö¸¸ ±×·¸´Ù°í ó¸®ÇÏÁö ¾ÊÀ» ¼ö´Â ¾ø´Ù. catch°¡ ó¸®ÇÏ´Â ¿¹¿Ü´Â ±Ø´ÜÀûÀÎ »óȲ¿¡ ´ëÇÑ ´ëÃ¥À̹ǷΠÀÌ·± Äڵ带 ºÐ¼®ÇÒ ¶§´Â ¹«½ÃÇϰí Àо »ó°ü¾ø´Ù. ¿ÀÈ÷·Á ±×·¯´Â ÆíÀÌ Äڵ带 »¡¸® Àд ¹æ¹ýÀ̸ç À̸¦ À§ÇØ ¿¹¿Ü ó¸® Äڵ带 ºÐ¸®ÇÏ´Â ¹®¹ýÀÌ Á¦°øµÇ´Â °ÍÀÌ´Ù.
ÇϳªÀÇ try ºí·Ï¿¡¼ ŸÀÔÀÌ ´Ù¸¥ ¿©·¯ °³ÀÇ ¿¹¿Ü¸¦ ¹ß»ý½Ãų ¼öµµ Àִµ¥ À̶§´Â ¿¹¿ÜÀÇ Å¸ÀÔ¼ö¸¸ÅÀÇ catch¸¦ try ºí·Ï ´ÙÀ½¿¡ ³ª¿ÇÏ¸é µÈ´Ù. °¢ catch ¹®µéÀº ¸ðµÎ try¿Í ÇÑ µ¢¾î¸®À̹ǷΠcatch¹® »çÀÌ¿¡µµ ´Ù¸¥ ¹®ÀåÀÌ ³¢¾îµé¾î¼´Â ¾ÈµÈ´Ù. ´ÙÀ½ ¿¹Á¦´Â µÎ Á¤¼ö¸¦ ÀÔ·Â¹Þ¾Æ ³ª´©±â ¿¬»êÀ» Çϴµ¥ ÇÇÁ¬¼ö´Â ¹Ýµå½Ã ¾ç¼ö¿©¾ß ÇÑ´Ù°í °¡Á¤Çϵµ·Ï ÇÏÀÚ.
|
¿¹ Á¦ : multicatch |
#include <Turboc.h>
void main()
{
int a,b;
try {
printf("³ª´©¾îÁú ¼ö¸¦ ÀÔ·ÂÇϽÿÀ : ");
scanf("%d",&a);
if (a < 0) throw a;
printf("³ª´©´Â ¼ö¸¦ ÀÔ·ÂÇϽÿÀ : ");
scanf("%d",&b);
if (b == 0) throw "0À¸·Î´Â ³ª´ ¼ö ¾ø½À´Ï´Ù.";
printf("³ª´©±â °á°ú´Â %dÀÔ´Ï´Ù.\n",a/b);
}
catch(int a) {
printf("%d´Â À½¼öÀ̹ǷΠ³ª´©±â °ÅºÎ\n",a);
}
catch(const char *message) {
puts(message);
}
}
try ºí·Ï¿¡¼ a¸¦ ¸ÕÀú ÀԷ¹ްí ÀÌ °ªÀÌ À½¼öÀÏ °æ¿ì Á¤¼ö°ª a¸¦ ´øÁø´Ù. À̶§ throw´Â Á¤¼ö°ªÀ» ¹Þ´Â catch¸¦ ã¾Æ Á¡ÇÁÇϸç catch´Â ÀÌ °ªÀÌ À½¼öÀ̹ǷΠ¿¬»êÀ» ÇÒ ¼ö ¾ø´Ù´Â ¿¡·¯ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ´Ù. a°¡ ¾ç¼öÀÏ °æ¿ì ´ÙÀ½ ¹®Àå¿¡¼ b¸¦ ÀԷ¹޴µ¥ b°¡ 0ÀÏ °æ¿ì ³ª´°¼ÀÀ» ÇÒ ¼ö ¾ø´Ù´Â ¹®ÀÚ¿ ¿¹¿Ü¸¦ ´øÁø´Ù. À̶§´Â char *¸¦ ¹Þ´Â catch¹®À¸·Î Á¡ÇÁÇÏ¿© ¹®ÀÚ¿À» ¸Þ½ÃÁö·Î Ãâ·ÂÇÑ´Ù.
a¿Í b°¡ ¸ðµÎ Á¤»óÀûÀ¸·Î ÀԷµǸé a/b ¿¬»ê °á°ú¸¦ Ãâ·ÂÇÏ°í µÚÂÊÀÇ catch¹®Àº ¹«½ÃµÈ´Ù. throw°¡ ´øÁö°í catch°¡ ¹Þ´Â °ÍÀ» ¿¹¿Ü °´Ã¼¶ó°í Çϴµ¥ throw°¡ ´øÁö´Â ½ÇÀμö°¡ catchÀÇ Çü½Ä Àμö·Î ´ëÀÔµÈ´Ù°í »ý°¢ÇÏ¸é µÈ´Ù. catch´Â Àü´ÞµÈ ¿¹¿Ü °´Ã¼¸¦ ÅëÇØ ¿¡·¯ÀÇ ³»¿ëÀ» ÆÄ¾ÇÇÏ°í ¿¡·¯¸¦ ¾î¶»°Ô ó¸®ÇÒ °ÍÀÎÁö¸¦ °áÁ¤ÇÑ´Ù.

catch´Â ¸¶Ä¡ throw¿¡ ÀÇÇØ È£ÃâµÇ´Â ÇÔ¼ö¿¡ ºñÀ¯µÉ ¼ö ÀÖÀ¸¸ç ÇÔ¼ö°¡ ¿À¹ö·ÎµùµÉ ¼ö ÀÖµíÀÌ catchµµ ¿©·¯ °¡Áö ¿¹¿Ü ŸÀÔ¿¡ µû¶ó ¿À¹ö·ÎµùµÉ ¼ö ÀÖ´Ù. throw°¡ ´øÁö´Â ¿¹¿ÜÀÇ Å¸ÀÔ°ú ÀÏÄ¡ÇÏ´Â catch°¡ È£ÃâµÇ´Â °ÍÀÌ´Ù. ÇÊ¿äÇÏ´Ù¸é catch³»¿¡¼ Áö¿ªº¯¼ö¸¦ ¼±¾ðÇØ¼ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ¹°·Ð ÀÌ´Â ¾îµð±îÁö³ª ºñÀ¯ÀÏ »Ó catch°¡ ÁøÂ¥ ÇÔ¼ö¶ó´Â ¾ê±â´Â ¾Æ´Ï´Ù. catch·Î À̵¿ÇÏ¸é ´Ù½Ã ¸®ÅÏÇÏÁö ¾ÊÀ¸¹Ç·Î throw¿¡ ÀÇÇØ Á¡ÇÁµÇ´Â ·¹À̺íÀ̶ó°í º¸´Â ÆíÀÌ ´õ Ÿ´çÇÏ´Ù. throw´Â È£Ãâ(call)ÀÌ ¾Æ´Ï¶ó ¹«Á¶°Ç ºÐ±â¹®ÀÎ goto¿Í ´õ °¡±õ´Ù.