32-2.¿¹¿Ü °´Ã¼

32-2-°¡.¿¹¿Ü¸¦ Àü´ÞÇÏ´Â ¹æ¹ý

ÇÔ¼ö°¡ ¾î¶² ¿¬»êÀ» ÇÏ´ø Áß¿¡ ÇÁ·Î±×·¥À» Á¤»óÀûÀ¸·Î ½ÇÇàÇÒ ¼ö ¾ø´Â ¿¡·¯°¡ ¹ß»ýÇßÀ» ¶§ ÇÔ¼ö´Â ¿¡·¯°¡ ¹ß»ýÇß´Ù´Â »ç½Ç »Ó¸¸ ¾Æ´Ï¶ó ¾î¶² Á¾·ùÀÇ ¿¡·¯°¡ ¿Ö ¹ß»ýÇß´ÂÁö »ó¼¼ÇÑ Á¤º¸¸¦ Àü´ÞÇØ¾ß ÇÑ´Ù. ±×·¡¾ß È£Ãâ¿ø¿¡¼­ ¿¡·¯ÀÇ Á¾·ù¿¡ µû¶ó ´ÙÀ½ µ¿ÀÛÀ» °áÁ¤ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀüÅëÀûÀÎ ¹æ¹ýÀº ¿¡·¯¸¦ ÀǹÌÇÏ´Â Á¤¼ö°ªÀ» ¸®ÅÏÇÏ´Â °ÍÀÌ´Ù. ´ÙÀ½ ¿¹Á¦ÀÇ 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); °ú °°ÀÌ & ¿¬»êÀÚ¸¦ »ç¿ëÇØ¾ß ÇϹǷΠÁ÷°üÀûÀÌÁö ¸øÇÏ´Ù. ¿©·¯¸ð·Î Æ÷ÀÎÅʹ ǥÇö½ÄÀÌ º¹ÀâÇϱ⠶§¹®¿¡ ·¹ÆÛ·±½º¸¦ ´ë½Å ¾²´Â °æ¿ì°¡ ¸¹´Ù.