ÇÔ¼ö°¡ ¾î¶² ¿¬»êÀ» ÇÏ´ø Áß¿¡ ÇÁ·Î±×·¥À» Á¤»óÀûÀ¸·Î ½ÇÇàÇÒ ¼ö ¾ø´Â ¿¡·¯°¡ ¹ß»ýÇßÀ» ¶§ ÇÔ¼ö´Â ¿¡·¯°¡ ¹ß»ýÇß´Ù´Â »ç½Ç »Ó¸¸ ¾Æ´Ï¶ó ¾î¶² Á¾·ùÀÇ ¿¡·¯°¡ ¿Ö ¹ß»ýÇß´ÂÁö »ó¼¼ÇÑ Á¤º¸¸¦ Àü´ÞÇØ¾ß ÇÑ´Ù. ±×·¡¾ß È£Ãâ¿ø¿¡¼ ¿¡·¯ÀÇ Á¾·ù¿¡ µû¶ó ´ÙÀ½ µ¿ÀÛÀ» °áÁ¤ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀüÅëÀûÀÎ ¹æ¹ýÀº ¿¡·¯¸¦ ÀǹÌÇÏ´Â Á¤¼ö°ªÀ» ¸®ÅÏÇÏ´Â °ÍÀÌ´Ù. ´ÙÀ½ ¿¹Á¦ÀÇ Calc ÇÔ¼ö´Â ¾î¶² À¯¿ëÇÑ °è»êÀ» ÇÏ´Â ÇÔ¼öÀε¥ ½ÇÇàÁß¿¡ ¿¡·¯°¡ ¹ß»ýÇß´Ù°í °¡Á¤ÇÏÀÚ.
|
¿¹ Á¦ : ExceptionReturn |
#include <Turboc.h>
int Calc()
{
// ¸Þ¸ð¸® ÇÒ´ç ÈÄ ¿¬»êÇØ¼ ÆÄÀÏ·Î Ãâ·ÂÇÏ´Â µ¿ÀÛÀ» ÇÑ´Ù°í ÇÏÀÚ.
if (TRUE/*¿¹¿Ü ¹ß»ý*/) return 1;
// ¿©±â±îÁö ¿ÔÀ¸¸é ¹«»çÈ÷ ÀÛ¾÷ ¿Ï·áÇßÀ½
return 0;
}
void main()
{
int e;
e=Calc();
switch (e) {
case 1:
puts("¸Þ¸ð¸®°¡ ºÎÁ·ÇÕ´Ï´Ù.");
break;
case 2:
puts("¿¬»ê ¹üÀ§¸¦ ÃʰúÇß½À´Ï´Ù.");
break;
case 3:
puts("ÇÏµå µð½ºÅ©°¡ °¡µæ á½À´Ï´Ù.");
break;
default:
puts("ÀÛ¾÷À» ¿Ï·áÇß½À´Ï´Ù.");
break;
}
}
Calc´Â Á¤»óÀûÀ¸·Î °è»êÀÌ ¿Ï·áµÇ¾úÀ» ¶§ 0À» ¸®ÅÏÇÏ¸ç ¿¡·¯°¡ ¹ß»ýÇßÀ» ¶§ 1~3»çÀÌÀÇ ¿¡·¯ Äڵ带 ¸®ÅÏÇÑ´Ù. Calc¸¦ È£ÃâÇϴ ȣÃâ¿ø¿¡¼´Â ÀÌ ÇÔ¼öÀÇ ¸®ÅϰªÀ» Á¡°ËÇÏ¿© 0ÀÎÁö ¾Æ´ÑÁö¸¦ ¹Ýµå½Ã »ìÆìº¸°í ¿¡·¯°¡ ¹ß»ýÇßÀ» ¶§ À̸¦ Àû±ØÀûÀ¸·Î ó¸®ÇØ¾ß ÇÑ´Ù. °¡·É ÀԷ°ªÀÌ À߸øµÇ¾ú´Ù¸é ´Ù½Ã ÀÔ·Â¹Þ¾Æ¾ß ÇÏ°í °è»ê¿¡ ÇÊ¿äÇÑ µ¥ÀÌÅͰ¡ ¾ø´Ù¸é ÀÌ µ¥ÀÌÅ͸¦ ÁغñÇÑ ÈÄ Calc¸¦ ´Ù½Ã ºÒ·¯¾ß ÇÒ °ÍÀÌ´Ù.
Á¤¼öÇüÀÇ Æ¯Á¤ÇÑ ¿¡·¯ Äڵ带 ³Ñ±â´Â ¹æ½ÄÀº Áö±Ý±îÁö ¸¹ÀÌ »ç¿ëÇØ ¿Ô´ø ¹æ½ÄÀ̱â´Â Çϳª ¿¡·¯ Äڵ尡 Á¤»óÀûÀÎ ¸®Åϰª°ú ¹Ýµå½Ã ±¸ºÐµÇ¾î¾ß ÇÏ´Â Á¶°ÇÀÌ ÀÖ´Ù. ÇÔ¼ö°¡ ¾ç¼ö¸¸ ¸®ÅÏÇÒ ¼ö ÀÖ´Ù¸é -1 µîÀÇ Æ¯À̰ªÀ» ¿¡·¯ Ç¥½ÄÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ ±×·¸Áö ¾ÊÀº °æ¿ì´Â ¸¶¶¥È÷ ¿¡·¯·Î ³Ñ±æ¸¸ÇÑ Æ¯À̰ªÀ» ¼±Á¤ÇϱⰡ ¹«Ã´ ¾î·Æ´Ù. ÀÌ·± °æ¿ì´Â ÂüÁ¶ È£Ãâ·Î º°µµÀÇ BOOLÇü º¯¼ö¸¦ ³Ñ°Ü ¿¡·¯ ¿©ºÎ¸¦ ¸®ÅÏÇÏ´Â ºÒÆíÇÑ ¹æ¹ýÀ» »ç¿ëÇØ¾ß Çß¾ú´Ù.
ÀÌ ÇÔ¼öÀÇ ¿¡·¯ ó¸® ¹æ½ÄÀ» C++ÀÇ ¿¹¿Ü ó¸® ±¸¹®À¸·Î ¹Ù²ã º¸ÀÚ. ¿¡·¯¸¦ ¸®ÅϰªÀ¸·Î ³Ñ±âÁö ¾ÊÀ¸¹Ç·Î ÇÔ¼ö´Â voidÇüÀ̾ »ó°ü¾øÀ¸¸ç ¸®ÅϰªÀ» ´Ù¸¥ ¿ëµµ·Î »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. Calc´Â ½ÇÇàÁß¿¡ ¿¡·¯°¡ ¹ß»ýÇϸé throw·Î ¿¹¿Ü¸¦ ´øÁö±â¸¸ ÇÑ´Ù. throw ÀÚü°¡ ÇÔ¼ö¸¦ Á¾·áÇϹǷΠº°µµÀÇ return¹®À» »ç¿ëÇÒ ÇÊ¿ä´Â ¾ø´Ù. ¿¹¿ÜÀÇ Å¸ÀÔÀ¸·Î Á¤¼ö¸¦ ¾µ ¼öµµ ÀÖÁö¸¸ »ç¶÷ÀÌ ¿¡·¯ Äڵ带 ÀÏÀÏÀÌ ±â¾ïÇØ¾ß ÇÑ´Ù´Â ¸é¿¡¼ ºÒÆíÇÏ´Ù. ±×·¡¼ Á¤¼öÇüÀÇ ¿¹¿Ü¸¦ ´øÁö´Â °Íº¸´Ù´Â ¿°ÅÇüÀÇ ¿¹¿Ü¸¦ ´øÁö´Â ÆíÀÌ ´õ Æí¸®ÇÏ´Ù.
|
¿¹ Á¦ : ExceptionEnum |
#include <Turboc.h>
enum E_Error { OUTOFMEMORY, OVERRANGE, HARDFULL };
void Calc()throw(E_Error)
{
// ¸Þ¸ð¸® ÇÒ´ç ÈÄ ¿¬»êÇØ¼ ÆÄÀÏ·Î Ãâ·ÂÇÏ´Â µ¿ÀÛÀ» ÇÑ´Ù°í ÇÏÀÚ.
if (TRUE/*¿¹¿Ü ¹ß»ý*/) throw OVERRANGE;
// ¿©±â±îÁö ¿ÔÀ¸¸é ¹«»çÈ÷ ÀÛ¾÷ ¿Ï·áÇßÀ½
}
void main()
{
try {
Calc();
puts("ÀÛ¾÷À» ¿Ï·áÇß½À´Ï´Ù.");
}
catch(E_Error e) {
switch (e) {
case OUTOFMEMORY:
puts("¸Þ¸ð¸®°¡ ºÎÁ·ÇÕ´Ï´Ù.");
break;
case OVERRANGE:
puts("¿¬»ê ¹üÀ§¸¦ ÃʰúÇß½À´Ï´Ù.");
break;
case HARDFULL:
puts("ÇÏµå µð½ºÅ©°¡ °¡µæ á½À´Ï´Ù.");
break;
}
}
}
Calc ÇÔ¼ö°¡ ¿¹¿Ü¸¦ ´øÁö¹Ç·Î mainÀº ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ¹®ÀåÀ» ¹Ýµå½Ã try ºí·Ï¿¡ ÀÛ¼ºÇϰí try ºí·Ï ´ÙÀ½¿¡´Â Calc°¡ ´øÁö´Â ¿¹¿Ü¸¦ ó¸®ÇÏ´Â catch ºí·ÏÀÌ À̾îÁø´Ù. catch´Â Calc°¡ ´øÁø ¿°ÅÇüÀÇ ¿¡·¯ Äڵ带 e·Î ¹Þ¾Æ e°ª¿¡ µû¶ó ´Ù¾çÇÑ ¹æ½ÄÀ¸·Î ¿¡·¯¸¦ ó¸®ÇÒ ¼ö ÀÖ´Ù. ÀÌ ¿¹Á¦´Â ´Ü¼øÈ÷ ¹®ÀÚ¿¸¸ Ãâ·ÂÇØ¼ ¿¡·¯ ¹ß»ý »ç½Ç¸¸ ¾Ë¸°´Ù.
¿°ÅÇüÀÇ ¿¡·¯ °ªÀº Á¤¼öÇüº¸´Ù Àǹ̰¡ Á» ´õ ºÐ¸íÇÏ´Ù´Â ¸é¿¡¼ »ç¿ëÇϱ⠽±´Ù. ±×·¯³ª È£Ãâ¿ø¿¡¼ ¿¡·¯ÀÇ Àǹ̸¦ ÀÏÀÏÀÌ ±â¾ïÇϰí ÇØ¼®ÇØ¾ß ÇÑ´Ù´Â Á¡¿¡ À־ ¿©ÀüÈ÷ ºÒÆíÇÏ´Ù. ¾Æ¿¹ ¿¹¿Ü¸¦ ÀÏÀ¸Å°´Â ÂÊ¿¡¼ ¿¹¿ÜÀÇ Àṉ̀îÁöµµ Àü´ÞÇϵµ·Ï ¹Ù²ã º¸ÀÚ. throw·Î ´øÁú ¼ö ÀÖ´Â ¿¹¿Ü °´Ã¼ÀÇ Å¸ÀÔ¿¡´Â Á¦ÇÑÀÌ ¾øÀ¸¹Ç·Î ¹®ÀÚ¿À» Æ÷ÇÔÇÏ´Â ±¸Á¶Ã¼¸¦ ´øÁø´Ù¸é ¿¡·¯ ¸Þ½ÃÁö¸¦ ±¸Á¶Ã¼¿¡ Æ÷ÇÔ½Ãų ¼ö ÀÖÀ» °ÍÀÌ´Ù.
±¸Á¶Ã¼º¸´Ù ´õ ÁÁÀº ¹æ¹ýÀº ¿¹¿Ü¿Í °ü·ÃµÈ µ¿ÀÛ±îÁöµµ ó¸®ÇÒ ¼ö ÀÖµµ·Ï ¿¹¿Ü¸¦ Ŭ·¡½º·Î Á¤ÀÇÇÏ´Â °ÍÀÌ´Ù. throw´Â ¿¹¿Ü Ŭ·¡½ºÀÇ Àӽà °´Ã¼¸¦ ¸¸µé¾î¼ ´øÁú ¼ö ÀÖÀ¸¸ç catch´Â ÀÌ ¿¹¿Ü °´Ã¼·ÎºÎÅÍ ¿¹¿Ü¿¡ ´ëÇÑ »ó¼¼ÇÑ Á¤º¸´Â ¹°·ÐÀÌ°í ¿¹¿Ü °´Ã¼°¡ ½º½º·Î ¿¹¿Ü¸¦ ó¸®Çϵµ·Ï ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇØ º¸ÀÚ.
|
¿¹ Á¦ : ExceptionObject |
#include <Turboc.h>
class Exception
{
private:
int ErrorCode;
public:
Exception(int ae) : ErrorCode(ae) { }
int GetErrorCode() { return ErrorCode; }
void ReportError() {
switch (ErrorCode) {
case 1:
puts("¸Þ¸ð¸®°¡ ºÎÁ·ÇÕ´Ï´Ù.");
break;
case 2:
puts("¿¬»ê ¹üÀ§¸¦ ÃʰúÇß½À´Ï´Ù.");
break;
case 3:
puts("ÇÏµå µð½ºÅ©°¡ °¡µæ á½À´Ï´Ù.");
break;
}
}
};
void Calc()
{
// ¸Þ¸ð¸® ÇÒ´ç ÈÄ ¿¬»êÇØ¼ ÆÄÀÏ·Î Ãâ·ÂÇÏ´Â µ¿ÀÛÀ» ÇÑ´Ù°í ÇÏÀÚ.
if (TRUE/*¿¡·¯ ¹ß»ý*/) throw Exception(1);
// ¿©±â±îÁö ¿ÔÀ¸¸é ¹«»çÈ÷ ÀÛ¾÷ ¿Ï·áÇßÀ½
}
void main()
{
try {
Calc();
puts("ÀÛ¾÷À» ¿Ï·áÇß½À´Ï´Ù.");
}
catch(Exception &e) {
printf("¿¡·¯ ÄÚµå = %d => ",e.GetErrorCode());
e.ReportError();
}
}
ExceptionÀ̶ó´Â ¿¹¿Ü Ŭ·¡½º¸¦ ¸ÕÀú Á¤ÀÇÇϴµ¥ ÀÌ Å¬·¡½º¾È¿¡´Â ¿¡·¯ Äڵ尪À» °¡Áö´Â ¸â¹ö¿Í »ý¼ºÀÚ, ¿¡·¯ Äڵ带 Á¶»çÇÏ´Â ÇÔ¼ö, ¿¡·¯ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ´Â ÇÔ¼ö°¡ Æ÷ÇԵǾî ÀÖ´Ù. ¿¡·¯¿¡ ´ëÇÑ ¸ðµç 󸮸¦ Ŭ·¡½º Çϳª¿¡ ÀÛ¼ºÇØ ³õ´Â °ÍÀÌ´Ù.
Calc ÇÔ¼ö´Â ¿¡·¯°¡ ¹ß»ýÇßÀ» ¶§ ¿¡·¯¿¡ ´ëÀÀµÇ´Â ¿¹¿Ü °´Ã¼¸¦ »ý¼ºÇÏ¿© ÀÌ °´Ã¼¸¦ throw·Î ´øÁö°í catch´Â ¿¹¿Ü °´Ã¼ÀÇ ·¹ÆÛ·±½º¸¦ ¹Þ¾Æ ¿¹¿Ü °´Ã¼·ÎºÎÅÍ ¿¡·¯ Äڵ带 ¾ò°í ¿¡·¯ ¸Þ½ÃÁö Ãâ·ÂÀ» ¿¹¿Ü °´Ã¼¿¡°Ô ½ÃŲ´Ù. ¿¹¿Ü Ŭ·¡½º´Â ÇÊ¿äÇÑ Á¤º¸´Â ¹°·ÐÀÌ°í µ¿ÀÛ±îÁö ¿Ïº®ÇÏ°Ô Á¤ÀÇÇÒ ¼ö ÀÖÀ¸¹Ç·Î ÇÑ ¹ø Àß ¸¸µé¾î ³õÀ¸¸é »ç¿ëÇϱ⠹«Ã´ ½±°í ¿øÇÑ´Ù¸é Àç»ç¿ëµµ °¡´ÉÇÏ´Ù. ±×·¡¼ throw°¡ ´øÁö´Â ¿¹¿Ü¿¡ ´ëÇÑ Á¤º¸¸¦ ¿¹¿Ü °´Ã¼¶ó°í ºÎ¸£´Â °ÍÀÌ´Ù. Á¤¼öÇüÀ̳ª ¹®ÀÚ¿ µîÀÇ ´Ü¼øÇÑ °ªÀ» ´øÁú ¼öµµ ÀÖÁö¸¸ ¾îÂ÷ÇÇ Á¤¼ö³ª ¹®ÀÚ¿µµ °´Ã¼À̹ǷΠ¿¹¿Ü °´Ã¼¶ó´Â Ç¥ÇöÀº ÀüÇô Ʋ¸®Áö ¾Ê´Ù.
throw´Â ´øÁö´Â ¿¹¿Ü °´Ã¼ÀÇ º¹»çº»À» »ý¼ºÇϰí ÀÌ º¹»çº»À» ´øÁø´Ù. À̶§ throw°¡ ´øÁö´Â °´Ã¼´Â Àӽà °´Ã¼ÀÏ »ÓÀ̹ǷΠnew ExceptionÀ¸·Î µ¿Àû »ý¼ºÇÒ Çʿ䰡 ¾ø´Ù. catch¿¡¼ ÀÌ °´Ã¼¸¦ ÀâÀ» ¶§´Â °¡±ÞÀûÀÌ¸é ·¹ÆÛ·±½º·Î Àâ´Â °ÍÀÌ ÁÁ´Ù. ¹°·Ð ·¹ÆÛ·±½º°¡ ¾Æ´Ñ °´Ã¼ ÀÚü¸¦ °ªÀ¸·Î ¹Þ°Å³ª Æ÷ÀÎÅÍ·Î ¹Þ¾Æµµ Àß µ¿ÀÛÇÑ´Ù. ±×·¯³ª ¾Ë´Ù½ÃÇÇ °´Ã¼´Â Å©±â ¶§¹®¿¡ °ªÀ¸·Î ¹ÞÀ¸¸é Àü´Þ ¼Óµµ°¡ ´À¸®´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù. Æ÷ÀÎÅ͸¦ ¾²¸é . ¿¬»êÀÚ ´ë½Å ->¸¦ »ç¿ëÇØ¾ß ÇϹǷΠ¾²´Â ÂÊ¿¡¼ ºÒÆíÇÒ »Ó¸¸ ¾Æ´Ï¶ó ¿¹¿Ü¸¦ ´øÁú ¶§µµ throw &Exception(1); °ú °°ÀÌ & ¿¬»êÀÚ¸¦ »ç¿ëÇØ¾ß ÇϹǷΠÁ÷°üÀûÀÌÁö ¸øÇÏ´Ù. ¿©·¯¸ð·Î Æ÷ÀÎÅʹ ǥÇö½ÄÀÌ º¹ÀâÇϱ⠶§¹®¿¡ ·¹ÆÛ·±½º¸¦ ´ë½Å ¾²´Â °æ¿ì°¡ ¸¹´Ù.