·Î±×ÀÎ | ȸ¿ø°¡ÀÔ (´º½º·¹ÅͽÅû) | SITEMAP
   
  °³¹ß   Ç÷§Æû   ½Ã½ºÅÛ   ¸Å´ÏÁö¸ÕÆ®   Àüü±â»ç  
ÀÚ¹Ù
´å³Ý
C/C++
DB
¸ðµ¨¸µ
À¥°³¹ß
±âŸ
À¯´Ð½º/¸®´ª½º
À©µµ¿ì
±âŸ
¼­¹ö
³×Æ®¿öÅ©
º¸¾È
±âŸ
BM
PM
±âŸ
 
±â»çÀúÀå
0
 
¸¶ÀÌ ½ºÅ©·¦
[ÇÁ·Î±×·¡¹Ö ÃÖÀûÈ­ ¨è] C++ ÇÁ·Î±×·¡¹Ö ÃÖÀûÈ­ ±â¹ý

Á¤¸í¼ö(»ï¼ºÀüÀÚ ¸Þ¸ð¸®»ç¾÷ºÎ ¿¬±¸¿ø)   2007/11/01
1ºÎ | °³¹ß ȯ°æÀÇ º¯È­¿Í ´ëÀÀÇÏ´Â ÇÁ·Î±×·¡¹Ö ÃÖÀûÈ­ÀÇ Àç¹ß°ß
2ºÎ | OPPÀû °³¹ßÀ» À§ÇÑ C++ ÇÁ·Î±×·¡¹Ö ÃÖÀûÈ­ ±â¹ý
3ºÎ | ¸®ÆÑÅ丵À» ÀÌ¿ëÇÑ ÀÚ¹Ù ¼º´É ÃÖÀûÈ­ ±â¹ý
4ºÎ | ¼º´É À̽´ ÇØ°áÀ» À§ÇÑ ´å³Ý ÇÁ·Î±×·¡¹Ö ÃÖÀûÈ­ ±â¹ý
5ºÎ | ARM°ú ÆÄ¿öpc¿¡ ±â¹ÝÇÑ ÀÓº£µðµå ÇÁ·Î±×·¡¹Ö ÃÖÀûÈ­ ±â¹ý
[Áöµð³ÝÄÚ¸®¾Æ]C++¿¡ ´ëÇÑ À̾߱⸦ Áö¸é¿¡ ½Ç¾î ³ª¸£ÀÚ¸é ¸î ¹é ÆäÀÌÁö¿¡ °ÉÃļ­ ½áµµ ¸ðÀÚ¶ö °ÍÀÌ´Ù. °´Ã¼ ÁöÇâÀû ÇÁ·Î±×·¥ ±â¹ýºÎÅÍ C ¿µ¿ªÀÇ Æ÷ÀÎÅÍ¿¡ À̸£±â ±îÁö ÇÏ°í ½ÍÀº ¸»µµ, ÇÏÁö ¸øÇÒ ¸»µµ ¸¹Àº °ÍÀÌ C++ÀÌ´Ù. °¨È÷ ´©°¡ ¿©·¯ °³ÀÇ ¸Ó¸®¿Í ¼ö½Ê °³ÀÇ ÆÈ´Ù¸®°¡ ´Þ¸° C++À̶õ ±«¹° ¾ð¾î¸¦ ºÒ°ú ¸î ÆäÀÌÁö¿¡ ´ãÀ» ¼ö Àְڴ°¡. C++À» »ç¿ëÇÏ´Â ±× ¸¹Àº ÇÁ·Î±×·¡¸Óµé¸¸Å­À̳ª ¸¹Àº À̾߱Ⱑ ´ã±ä °ÍÀÌ C++ÀÏ °ÍÀÌ´Ù. ÇÊÀÚ´Â C++¸¦ °´Ã¼ ÁöÇâÀû °³³äÀÇ ¸î °¡Áö À̽´¸¦ °¡Áö°í À̾߱âÇØ º¼ °ÍÀÌ´Ù.

¸çÄ¥ Àü¿¡ ÇÊÀÚÀÇ ¿©ÀÚ Ä£±¸·ÎºÎÅÍ Å¬·¡½º(Class)¿Í ½ºÆ®·°Ã³(Structure)ÀÇ Â÷ÀÌ¿¡ ´ëÇÑ Áú¹®À» ¹Þ¾Ò´Ù. ÇÊÀÚÀÇ ´ë´äÀº¡®¾î¶² ½ºÆ®·°Ã³¿¡¼­¿ä?¡¯¶ó´Â Áú¹® ÇѸ¶µð¿´´Ù. Ŭ·¡½º¿Í ½ºÆ®·°Ã³ÀÇ Â÷ÀÌ´Â ¹«¾ùÀΰ¡?

´Ùµé Àß ¾Ë°í ÀÖ°ÚÁö¸¸ ÀÏ´Ü CÀÇ ½ºÆ®·°Ã³¿Í C++ÀÇ ½ºÆ®·°Ã³´Â ´Ù¸£´Ù. ±×µµ ±×·² °ÍÀÌ C++ÀÇ ½ºÆ®·°Ã³´Â C¿Í´Â ´Ù¸£°Ô Constructor¿Í °°Àº Class AbstractionÀÇ Çʼö ¿ä¼Ò¸¦ Áö¿øÇϸç, ½ºÆ®·°Ã³ ¾È¿¡ ÇÔ¼ö¸¦ ¹ÙÀεù ÇÒ ¼ö ÀÖ´Ù.

±×·³ C++¿¡¼­ÀÇ ½ºÆ®·°Ã³¿Í Ŭ·¡½ºÀÇ Â÷ÀÌ´Â ¹«¾ùÀΰ¡. »ç½Ç Â÷À̰¡ ¾ø´Ù. ´ÜÁö ¸â¹ö ¼±¾ð ¶§ Ŭ·¡½ºÀÇ ±âº» °ª(Default)Àº PrivateÀÌ°í ½ºÆ®·°Ã³´Â PublicÀ̶ó´Â °Í ¿Ü¿¡´Â ´Ù¸¥ °ÍÀÌ ¾ø´Ù.

Àû¾îµµ ¾ð¾îÀûÀÎ Ãø¸é¿¡¼­´Â ±×·¸´Ù. µ¶ÀÚ ¿©·¯ºÐÀÌ ÇÊÀÚ¶ó¸é °°Àº ÄÄÇ»Å͸¦ Àü°øÇÏ´Â ¿©ÀÚ Ä£±¸¿¡°Ô ´ÜÁö Â÷À̰¡ ¾ø´Ù°í ´ë´äÇϰڴ°¡? ¹°·Ð ¾Æ´Ï´Ù°¡ Á¤´äÀÏ °ÍÀÌ´Ù.

¸¶Âù°¡Áö ÀÌÀ¯¿¡¼­ C++ÀÇ ÃÖÀûÈ­¿¡¼­´Â Æ÷ÀÎÅÍÀÇ ÀÌ¿ë, ÄÚµå »çÀÌÁî µî ¾ð¾î ÀÌ¿ëÀûÀÎ Ãø¸é¸¸À» °í·Á ÇÒ ¼ö ¾ø´Ù. ¿Ö? OOP¸¦ ´Ù·ç´Â ¾ð¾î´Â Àû¾îµµ OOP¿¡ ¸Â°Ô ¾²´Â °ÍÀÌ °¡Àå Å« ºñÁßÀ» °¡Áö¸ç ¾ð¾î´Â °´Ã¼ÁöÇâÀû ÆÐ·¯´ÙÀÓÀ» ±¸ÇöÇÏ´Â ÇϳªÀÇ µµ±¸¿¡ ºÒ°ú Çϱ⠶§¹®ÀÌ´Ù. ¿©±â¿¡¼­´Â ¹Ù·Î ±×·± °üÁ¡¿¡¼­ C++À» »ìÆìº¼ °ÍÀÌ´Ù.

  C++ ÇÁ·Î±×·¡¸Ó VS C ÇÁ·Î±×·¡¸Ó

´ÙÀ½ Áú¹®¿¡ ´ëÇØ »ý°¢ÇØ º¸ÀÚ.¡® C·Î ±¸ÇöÇÏ´Â °´Ã¼ ÁöÇâÀº ºÒ°¡´ÉÇѰ¡?¡¯Àá½Ã Ã¥À» µ¤°í »ý°¢ÇÑ µÚ¿¡ ´ÙÀ½ ±ÛÀ» Àо ±¦Âú´Ù. ¿ì¸®´Â °³¹ßÀÚ¿Í ¼úÀÚ¸®¿¡¼­ ÀÌ·± È­Á¦¸¦ °¡Áö°í ¹ã »õ¿ö °¡¸ç ¸ñ¿¡ Çʹ븦 ¼¼¿ì´Â ÀÏÀÌ Çã´ÙÇÏ´Ù. C·Î C++ó·³ °´Ã¼ ÁöÇâÀû °³¹ßÀ» ÇÏ´Â °ÍÀº ºÒ°¡´É ÇѰ¡?

¹°·Ð È­·ÁÇÑ OOP´Â ¾î·Æ°ÚÁö¸¸ Àß ±¸Á¶È­µÈ C¹®¹ýÀ¸·Îµµ ÃæºÐÈ÷ Ç¥Çö °¡´ÉÇÏ´Ù. »óÀ§ ¿µ¿ªÀÇ Object C·Î Á¦ÀÛÇÏ´Â GTK+ °°Àº °÷¿¡¼­ C++°ú À¯»çÇÑ Ãß»óÈ­¸¦ °¡Áø ¾ÆÅ°ÅØÃ³¸¦ ½±°Ô ¸¸³¯ ¼ö ÀÖ´Ù. ¶ÇÇÑ CÀÇ ÀüÇüÀûÀÎ ¿µ¿ªÀÎ ÀÓº£µðµå ¼ÒÇÁÆ®¿þ¾î¿¡¼­µµ ±¸Á¶Ã¼¿Í ÇÔ¼ö Æ÷ÀÎÅ͵éÀ» ÀÌ¿ëÇÏ¿© C++À» Èä³» ³½ Ãß»óÈ­ ÄÚµåµéÀ» °£È¤ °æÇèÇÒ ¼öÀÖ´Ù.

½ºÆ®¶ó¿ì½ºÆ®·´ÀÌ C++À» ¸¸µé±â ½ÃÀÛÇÒ ¶§¿¡µµ¡®C with data abstraction¡¯¶ó´Â ÇÁ·ÎÅäŸÀÔ ¾ð¾î·ÎºÎÅÍ ½ÃÀÛ µÇ¾ú´ø ¸¸Å­ C¿Í C++ ¾ð¾îÀÇ ¿µ¿ª Â÷ÀÌ´Â ¾Ö¸ÅÇÏ´Ù. ÀÌ·¯ÇÑ ¾ð¾î¸¦ »ç¿ëÇÏ´Â ÇÁ·Î±×·¡¸Óµµ ±× Â÷À̸¦ ¸íÈ®È÷ ±¸ºÐÇϱ⠾î·Á¿ï ¼ö¹Û¿¡ ¾ø´Ù.

C++Àº CÀÇ ºÒÆíÇÑ Á¡À» º¸¿ÏÇØÁÖ´Â ¾ð¾îµµ ¾Æ´Ï¸ç Cº¸´Ù Á» ´õ °í±Þ ±â¼úÀ» ±¸»çÇÏ´Â µµ±¸µµ ¾Æ´Ï´Ù. ´õ¿íÀÌ Çö¾÷¿¡¼­ ¸ðµç ¹®Á¦¸¦ Çѹ濡 ÇØ°á ÇØÁÖ´Â Àº źȯ(Silver bullet) °°Àº Á¸Àç´Â ´õ ´õ¿í ¾Æ´Ï´Ù.

±×·³¿¡µµ ºÒ±¸ÇÏ°í ¿ì¸®´Â ¿Ö C++À» »ç¿ëÇØ¾ß Çϴ°¡? ±×°ÍÀº ¹®Á¦ ÇØ°á¹ýÀÌ C¿Í´Â ÆÇÀÌÇÏ°Ô ´Ù¸£±â ¶§¹®ÀÌ´Ù. À̰ÍÀº C¿Í C++ÀÇ ¾ð¾îÇÐÀû ¹®Á¦¸¦ ¹þ¾î³­´Ù. C ÇÁ·Î±×·¡¸Ó¿Í C++ ÇÁ·Î±×·¡¸ÓÀÇ Â÷ÀÌ´Â ¾î¶² ¾ð¾î¸¦ »ç¿ëÇϴ°¡°¡ ¾Æ´Ï¶ó ¾î¶°ÇÑ °üÁ¡¿¡¼­ ¹®Á¦¸¦ ÇØ°á ÇÏ´Â °¡ÀÌ´Ù.

¾Æ¹«·¡µµ Çϵå¿þ¾î °³¹ßÀÚµéÀÌ ÁÖ·ù¸¦ ÀÌ·ç´Â ÇÊÀÚÀÇ Çö¾÷¿¡¼­´Â °¡²û °³¹ß µµÁß¿¡ C¾ð¾î¸¦ ÀÚÀ¯ÀÚÁ¦·Î ±¸ÇöÇÏ´Â °³¹ßÀÚ°¡ ¡®C++ ±×°Å ÇÏ·ç¸é Çϴµ¥ ¹»?¡¯À̶ó´Â ¾ê±â¸¦ µéÀ» ¶§ ¸¶´Ù ¸¶À½ÀÌ ¾ÆÇÁ´Ù. C++À» ÇÏ·ç(?) ¸¸¿¡ ÇÏ¿´´Ù¸é Ŭ·¡½º¸¦ ¾²Áö ¸»°í Àß ±¸Á¶È­ µÈ C¸¦ ¾²¸é µÈ´Ù.

±¸Á¶Ã¼¿¡ °¢ ¸Þ¼Òµå°¡ µÉ ÇÔ¼ö Æ÷ÀÎÅ͵éÀ» ¼±¾ðÇÏ°í »ý¼ºÀÚ°¡ µÉ ¸â¹ö º¯¼ö¸¦ ³Ö¾î ÀÌ ÇÔ¼ö Æ÷ÀÎÅ͵éÀ» ÃʱâÈ­ ÇØÁÖ°í ³ª¼­ Àü¿ª¿¡ Á¸Àç ÇÏ´Â new¶ó´Â ÇÔ¼ö¸¦ ¸¸µç´Ù. ´Ù½Ã ÀÌ ÇÔ¼ö°¡ °¢°¢ÀÇ ±¸Á¶Ã¼¸¦ ÇÒ´ç ¹Þ°Ô ÇÏ¸é ±×·± À̾߱⸦ ÇÏ´Â °³¹ßÀÚµéÀÌ »ç¿ëÇϴ Ŭ·¡½º¸¦ Èä³» ³½ C¸¦ ½±°Ô ¸¸µé ¼ö ÀÖ´Ù.

 <¸®½ºÆ® 1> Class¸¦ Èä³» ³½ CÄÚµå


¹°·Ð Ãß»óÈ­ ÇÒ ¼ö ÀÖ´Â ¹üÀ§°¡ Á¦ÇÑÀûÀÌ°í ºÒÇÊ¿äÇÑ Äڵ尡 µé·¯ºÙ±â´Â ÇÏÁö¸¸ ºÐ¸í Ŭ·¡½º¿Í À¯»çÇÑ ÇൿÀ» Çϵµ·Ï ó¸® ÇÒ¼ö ÀÖ´Ù. ƯÈ÷ ¾Õ¼­ ¼Ò°³ÇÑ GTK+À̳ª brewµîÀÇ Äڵ带 º¸¸é ÀÌ·¯ÇÑ ±â¹ýµéÀº ºó¹øÇÏ°Ô Àû¿ë µÇ¾î ÀÖ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

CÀÇ ±¸Á¶Ã¼¿Í´Â ´Ù¸£°Ô C++¿¡¼­´Â °¡»ó ÇÔ¼ö Å×À̺íÀ» °¢ Ŭ·¡½º ¸¶´Ù °¡Áø´Ù. ÀÌ·¯ÇÑ °ÍµéÀ» ÀÌ¿ëÇÑ °´Ã¼ ÁöÇâÀûÀÎ ±â¹ýÀÎ C++¿¡¼­ ´ÙÇü¼º(Ploymorphism), µ¿Àû ¹ÙÀεù(Dynamic binding), Ŭ·¡½º »ó¼Ó(Inheritance)À» »«´Ù¸é ±×°ÍÀº ½ºÆ®·°Ã³¿Í °°ÀÌ ¹ß¶ó³½ ÀÚ·á Ãß»óÈ­ °üÁ¡ÀÇ C++¿¡ ºÒ°ú ÇÏ´Ù. ´Ù½Ã Á¤¸®ÇÏÀÚ¸é, C++Àº ´ÜÁö OOP ÆÐ·¯´ÙÀÓÀ» ±¸Çö ÇÒ ¼ö ÀÖ°Ô ÇØÁÖ´Â ¾ð¾îÀûÀÎ µµ±¸ ÀÏ»ÓÀÌÁö C++±× ÀÚü°¡ ÀÇ¹Ì ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù.

  ½Ã½ºÅÛ ÇØ¼®ÇÐÀû °üÁ¡¿¡¼­ º» C¿Í C++ÀÇ Â÷ÀÌ

°´Ã¼ ÁöÇâÀû ¹®Á¦ ÇØ°á¹ý¿¡ µé¾î°¡±â Àü¿¡ ½Ã½ºÅÛ ÇØ¼®ÇÐÀû °üÁ¡¿¡¼­ À̸¦ °üÂû ÇØº¸ÀÚ. C·Î ±¸ÇöµÈ ÇÔ¼ö ¸ðµâ°ú C++·Î ±¸ÇöµÈ ÇÔ¼ö ¸ðµâÀº ¾î¶² Â÷À̸¦ °¡Áú±î? ¿ì¸®´Â <±×¸² 1>, <±×¸²2>¿Í °°Àº ºí·Ï °³³äÀÇ ´ÙÀ̾î±×·¥À» »ý°¢Çغ¼ ¼ö ÀÖ´Ù.

<±×¸² 1> C °üÁ¡ÀÇ ½Ã½ºÅÛ

<±×¸² 2> C++ °üÁ¡ÀÇ ½Ã½ºÅÛ

¾î¶² Â÷À̸¦ º¼ ¼ö Àִ°¡? CÀÇ °üÁ¡¿¡¼­´Â °¢°¢ÀÇ µ¥ÀÌÅ͵éÀÌ ³ëµå¸¦ ÀÌ·ç°í À̰͵éÀÌ ´Ù¸¥ »óÅÂÀÇ µ¥ÀÌÅÍ·Î À̵¿ÇÒ ¶§ ¸µÅ©¸¦ ÇÔ¼ö·Î ¸¸µé°í ÀÖ´Ù. ÇÏÁö¸¸ C++°üÁ¡¿¡¼­ º¸¸é, Ŭ·¡½º¶ó´Â Ãß»óÈ­ °üÁ¡ÀÇ ¸ðµâÀÌ ³ëµå¸¦ ÀÌ·ç°í °¢°¢ÀÇ °ü°è°¡ ¸µÅ©¸¦ ÀÌ·ç°Ô µÈ´Ù. ÀÌ µÑÀº Å« Â÷À̸¦ °¡Á® ¿Â´Ù.

ÈçÈ÷ ½Ã½ºÅÛÀÇ º¹Àâµµ¸¦ ³íÇÏ´Â µÎ °¡Áö Áß Çϳª´Â ½Ã½ºÅÛÀ» ±¸¼ºÇÏ´Â ÄÄÆ÷³ÍÆ® ¼öÀÌ°í ´Ù¸¥ Çϳª´Â ±× ±¸¼º¿øÀ» ¿¬°áÇÏ´Â ¸µÅ©ÀÇ ¼öÀÌ´Ù.

ÄÄÆ÷³ÍÆ®ÀÇ ¼ö´Â n°³·Î »ó¼ö¿¡ ºñ·ÊÇÏ¿© Áõ°¡ÇÏÁö¸¸ ÀÌ ÄÄÆ÷³ÍÆ®¸¦ ¿¬°áÇÏ´Â ¸µÅ©ÀÎ ÇÔ¼öµéÀº n°³¿¡¼­ 2°³¸¦ ¼±ÅÃÇÏ´Â Á¶ÇÕ°ú °°À¸¹Ç·Î n(n-1)/2 ¿Í °°´Ù. ÀÌ º¹Àâµµ´Â O(n2)À¸·Î ½Ã½ºÅÛÀÌ Ä¿Áú¼ö·Ï ¾Ë°í¸®ÁòÀÇ º¹Àâµµ¸¦ Á¦¾îÇϱâ Èûµé¾î Áø´Ù.

»ç½Ç C¾ð¾î·Î ÀÛ¼ºÇϵç C++·Î ÀÛ¼ºÇÏµç °á±¹ ÄÄÆÄÀÏ ÇÏ°í ³ª¸é ±â´É°ú µ¥ÀÌÅ͸¸ Á¸Àç ÇÏ´Â ¹ÙÀ̳ʸ® ÆÄÀÏ¿¡ ºÒ°úÇÏ´Ù. ÀÌ·¯ÇÑ º¹Àâµµ Á¦¾î´Â C¿Í C++ ÆÐ·¯´ÙÀÓÀÇ Àû¿ëÀÌ ½Ã½ºÅÛ ÇØ¼®ÇÐÀû ÀÔÀå¿¡¼­ ºÃÀ»¶§ ¾ó¸¶³ª º¹ÀâÇØÁö´ÂÁö¸¦ ¾Ë ¼ö ÀÖ´Ù.

  °´Ã¼ÁöÇâ ¹®Á¦ ÇØ°á¹ý

°´Ã¼ÁöÇâ(Object Oriented)ÀÇ ¹®Á¦ ÇØ°á¹ý¿¡ ´ëÇØ ¾Ë¾Æº¸±â¿¡ ¾Õ¼­ ´ÙÀ½ÀÇ ÇÔ¼ö¸¦ Àá½Ã »ìÆìº¸ÀÚ.

inline int square(int a) { return a *= a; }
inline float square(float a) { return a *= a; }

¹°·Ð ÀÌ ÇÔ¼ö¸¦ º¸¸é¼­ TemplateÀ» ÅëÇÑ ±¸ÇöÀ» »ý°¢ Çϰųª Function pointer¸¦ »ç¿ëÇÑ Generic FunctionÀ» »ý°¢ ÇÒ ¼öµµ ÀÖ´Ù. ÇÏÁö¸¸ ÇÊÀÚ°¡ À̾߱â ÇÏ·Á´Â °ÍÀº Á¶±Ý ´Ù¸¥ À̾߱â´Ù. square ÇÔ¼öÀÇ Á¤ÀÇ¿ª(Domain)°ú Ä¡¿ª(Range)Àº ¹«¾ùÀΰ¡? Á¤ÀÇ¿ªÀº Integer³ª floatÇüÀÇ ¼ýÀÚÀ̰í Ä¡¿ªµµ ¸¶Âù°¡Áö·Î ¼ýÀÚÀÌ´Ù.

static int factorial(int i)
{
if (i<2) return 1;
return i*factorial(i-1);
}

ÀÌ ÆÑÅ丮¾ó Äڵ忡¼­ÀÇ °ø¸®(Axiom)´Â ¹«¾ù Àΰ¡. If (i<2) return 1; Âë µÉ °ÍÀÌ´Ù. ¿ì¸®´Â ÈçÈ÷ C¾ð¾î¸¦ ¶óÀÌÇÁ ´ÏÂî°¡ Á¤ÀÇÇÑ ¼öÇÐÀÇ ÇÔ¼ö¸¦ ¸ð¹æÇϰí ÀÖ´Ù°í »ý°¢ÇÒ ¼ö ÀÖ´Ù.

ÇÁ·Î½ÃÁ®(Procedure)¶ó´Â À̸§À¸·Î ÇÔ¼ö¿Í´Â ´Þ¸® ÇÁ·Î¼¼½º Áß½ÉÀÇ »óÅ º¯È­¸¦ ³ªÅ¸³»´Â ÇÔ¼öµéµµ Á¸ÀçÇÏÁö¸¸ ±× ¶ÇÇÑ Ä¡¿ªÀÌ voidÀÎ ÇÔ¼öÀÏ »ÓÀÌ´Ù. ¼öÇп¡¼­ 1:1, n:1, n:nÀº ÇÔ¼ö¿¡ µé¾î°¡´õ¶óµµ1:nÀº ÇÔ¼ö°¡ ¾Æ´Ï´Ù. ¿©·¯ºÐÀÇ ÄÚµå Áß¿¡ int float double Squre(int a)¶ó´Â ÇÔ¼ö°¡ ¾ø´Â °Í°ú ¸¶Âù°¡Áö´Ù.

±×·¸´Ù¸é ¼ÒÇÁÆ®¿þ¾î¸¦ °³¹ßÇÑ´Ù´Â °ÍÀº º»ÁúÀûÀ¸·Î ¾î¶² Àǹ̸¦ °¡Áö´Â°¡? ½ÇÁ¦ ¼¼°èÀÇ Á¤º¸³ª Çö»óµé Áß °ü½É Àְųª ±¸ÇöµÇ¾î¾ß ÇÏ´Â ºÎºÐ¸¸À» ½Ã½ºÅÛÀ¸·Î ¿Å±â´Â ½Ã¹Ä·¹À̼ÇÀÌ °¡Àå Å«Àǹ̸¦ °¡Áú °ÍÀÌ´Ù. ¼öÇÐ ¶ÇÇÑ ½Ç¼¼°è¸¦ ¸ÅÇÎÇÏ´Â °ÍÀÇ ÀÏÁ¾ÀÎ ¾ð¾î¶ó°í º¼ ¼ö ÀÖÀ¸´Ï ¸»ÀÌ´Ù. ´Ù¸¸ ¼öÇÐÀ¸·Î Áõ¸íµÇÁö ¾Ê´Â °ÍÀÌ ¾ó¸¶³ª ¸¹Àº°¡?

¿ì¸®´Â À©µµ¿ì¿¡¼­ »ç¿ëÀÚ°¡ Ŭ¸¯Çϰí ÀÔ·ÂÇÏ´Â °ÍÀ» Á¤ÀÇ¿ª(Domain)À¸·Î, È­¸éÀÇ Ãâ·Â ³»¿ëÀ» Ä¡¿ªÀ¸·Î ºÒ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ »ç¿ëÀÚÀÇ ¿òÁ÷ÀÓÀ» ¼öÇÐÀûÀÎ ÇÔ¼ö·Î¸¸(¼öÇÐÀûÀ¸·Î Áõ¸íµÇ´Â »ç½Çº¸´Ù Áõ¸íÇÏÁö ¸øÇÏ´Â »ç½ÇÀÌ ÈξÀ ¸¹´Ù) Á¤ÀÇÇϱ⿡´Â ¹èº¸´Ù ¹è²ÅÀÌ ´õ Å« °Íó·³ ¿À¹öÇìµå°¡ µé¸ç, ÀÌ·¯ÇÑ ÇൿµéÀ» ¼öÇÐÀû Áõ¸íÀ¸·Î Ç¥ÇöÇϱ⿡´Â ¹«¸®°¡ ÀÖ´Ù.

¿ì¸®´Â ÀÌ °°Àº ½Ç¼¼°è¸¦ ÄÄÇ»ÅÍ ³»ºÎ·Î ¹Ý¿µÇϱâ À§ÇÏ¿© °¢°¢ÀÇ °³Ã¼µéÀ» Ŭ·¡½ºÀÇ ¼Ó¼º(Attribute)°ú Çൿ(Method)µé·Î Á¤ÀÇÇϰí À̵éÀÇ °ü°è¸¦ ÅëÇØ Á» ´õ Æí¸®ÇÏ°Ô ½Ç¼¼°è¸¦ Ãß»óÈ­ ÇÏ°í º¹»ç ¹Ý¿µÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

Ưº°ÇÑ ¼öÇÐÀû Áõ¸í ¾øÀ̵µ ¿ì¸® ´«À¸·Î º¸°í ´À³¤ °ÍÀ» Ãß»óÈ­¿¡ ÀÌ¿ëÇÒ ¼ö ÀÖ°í ±×·¯ÇÑ Ãß»óÈ­ ´ÜÀ§µéÀÌ ¿«¾îÁ®¼­ ÇϳªÀÇ ÇÁ·Î±×·¥ÀÌ µÈ´Ù. ±× ´ö¿¡ Á» ´õ ¸¹Àº ºÐ¾ßÀÇ »ç¶÷µéÀÌ ÇÁ·Î±×·¥À̶ó´Â °ÍÀ» ÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù. ÀÌ·¯ÇÑ °´Ã¼ ÁöÇâÀû ¹®Á¦ ÇØ°á¹ý¿¡¼­ Áß¿äÇÑ °ÍÀº °³Ã¼µéÀÇ µ¿µîÇÔÀÌ´Ù.

¿ì¸®´Â °£È¤ Äڵ忡¼­ Àü¿ª º¯¼ö³ª Àü¿ª ÇÔ¼ö µîÀ» º¸°Ô µÈ´Ù. ÀÌ·¯ÇÑ °³Ã¼µéÀº Ŭ·¡½º·Î ±¸ÇöµÈ ³»¿ëµé°ú µ¿µîÇѰ¡? Ŭ·¡½ºÀÇ ¼Ó¼º°ú ÇൿÀº ±× Ŭ·¡½º ¾È¿¡ Á¾¼ÓÀûÀÌ´Ù. »ý°¢Çغ¸¸é ´ç¿¬ÇÑ °ÍÀÌ´Ù. »ç¶÷À̶ó´Â Ŭ·¡½º¸¦ Á¦ÀÛÇÒ ¶§ »ç¶÷ÀÌ ¸Ô°í ÀÔ°í ÀÜ´Ù´Â Çൿ°ú, ³»ºÎÀûÀ¸·Î »ý°¢, »ç°í, ¼ºº° µîÀ» °¡Áö´Â °ÍÀº »ç¶÷¿¡°Ô¸¸ Á¾¼ÓÀûÀÎ °ÍÀÌ´Ù.

ÀÌ·¯ÇÑ ÇൿµéÀÌ ´Ù¸¥ ¿©Å¸ µ¿¹°, »ç¹° µîÀÇ Çൿµé°ú ¿«À̸鼭 »óŰ¡ º¯È­ÇÏ´Â °ÍÀε¥, ¾Õ¿¡¼­ ¸»ÇÑ Àü¿ª º¯¼ö³ª Àü¿ª ÇÔ¼ö¸¦ »ìÆìº¸¶ó. ÀÌ µÑÀº Á˾ÇÀÎ ÄÚµåÀÌ´Ù(¹°·Ð Çö¾÷¿¡¼­ ÀÌ·¯ÇÑ Äڵ带 ³²¹ß Çϱ⵵ ÇÑ´Ù).

¸ðµÎ Ŭ·¡½º°¡ µ¿µîÇѵ¥ ÀÌ µÑ¸¸ ½Å(􃊦)ÀÎ °ÍÀÌ´Ù. ¾îµðµçÁö Á¸Àç ÇÒ ¼ö ÀÖ°í ¾î¶² »ç¹°À̵çÁö º¯È­½Ãų ¼ö ÀÖ´Â ÀÌ·¯ÇÑ Àü¿ªÇÔ¼ö¿Í º¯¼öµéÀº ¸ðµÎ Á¦°ÅµÇ¾î¾ß Çϴ°ÍÀÌ´Ù.

±×·¸´Ù¸é °´Ã¼ ÁöÇâÀû ¾ð¾î¿¡¼­ÀÇ ½ºÆ®·°Ã³´Â ¾î¶³±î? OOP ¾ð¾î¿¡¼­ ½ºÆ®·°Ã³¶ó´Â °ÍÀÌ ÇÊ¿äÇѰ¡¿¡ ´ëÇÑ Áú¹®À» ÇØ º¼ ¼ö ÀÖ´Ù. °´Ã¼ ÁöÇâÀû ¾ð¾îÀÇ ±¸¼ºÀÌ ¸ðµÎ °´Ã¼¶ó¸é ½ºÆ®·°Ã³´Â ÀÚ·á Ãß»óÈ­¿¡ ÇÊ¿ä ¾ø´Â °ÍÀÌ ´ç¿¬ÇÏ´Ù.

ÇÊÀÚ°¡ ¸»ÇϰíÀÚ ÇÏ´Â °ÍÀº C++¾ð¾î·Î »ç¿ëµÇ´Â °÷¿¡ ¸ðµç ±¸¼º ¿øÀÚ¿Í ºÐÀÚµéÀº Ŭ·¡½º·Î ÀÌ·ç¾îÁ®¾ß ÇÏ°í ¸ðµÎ ÄÚµå »ó¿¡¼­ ÆòµîÇÑ À§Ä¡¿¡ ÀÖ¾î¾ßÇÑ´Ù´Â Á¡ÀÌ´Ù.

ÇÊÀÚ¿Í Ä£ºÐÀÌ ÀÖ´Â ÇÑ ±³¼ö´ÔÀÇ ÀÇ·Ú·Î Çлý ½ÃÀý¿¡´Â ȸ»çÀÇ Code Wizard¶ó´Â ÇÁ·ÎÁ§Æ®ÀÇ ¿ÜÁÖ¸¦ ¸ÃÀº ÀûÀÌ ÀÌ ÇÁ·ÎÁ§Æ®ÀÇ ¿ä±¸ »çÇ×Àº C Äڵ带 ¶â¾î ºÙÀÌ´Â ½ÄÀÇ ÄÞÆ÷³ÍÆ®·Î ¾î¸°¾ÆÀ̵éÀÌ ½±°Ô Äڵ带 »ý¼ºÇÏ´Â ÀÏÁ¾ÀÇ ÅøÀ» ¸¸µé¾î´Â °ÍÀ̾ú´Ù. <È­¸é 1>Àº ±× ÇÁ·Î±×·¥ÀÇ ½ÇÇàÈ­¸éÀÌ´Ù.

<È­¸é 1> Component ±â¹ÝÀÇ Code Wizard

ÀÌ·¯ÇÑ ¸ð½À¿¡¼­ ÁÂÃø Äڵ带 ±¸ÇöÇÏ°Ô µÇ´Â ÄÄÆ÷³ÍÆ®µéÀÇ ±¸ÇöÀ» Àá½Ã »ý°¢Çغ¸ÀÚ. ÁÂÃø ÄÄÆ÷³ÍÆ®µéÀº ÀÚÀ¯ÀÚÀç·Î ¶â¾î ºÙÀÏ ¼ö ÀÖ¾î¾ß Çϱ⿡ À©µµ¿ìÀÇ ´ÙÀ̾ó·Î±×·ÎºÎÅÍ »ó¼Ó ¹Þ¾Æ ±¸ÇöÇÏ¸é µÉ °ÍÀÌ´Ù. ÄÚµù¿¡ µé¾î°¡±â Àü¿¡ ¿©·¯ºÐÀÌ »ý°¢ÇÒ °ÍÀº Ŭ·¡½º °£ÀÇ ´ÙÀ̾î±×·¥ÀÌ´Ù.

ÀÌ ÇÁ·Î±×·¥ÀÇ ÇÁ·¹ÀÓ¿öÅ©¸¦ Á¦ÀÛÇß´ø ÇÊÀÚÀÇ ÈĹè´Â ´ÙÀ̾ó·Î±×·ÎºÎÅÍ »ó¼Ó ¹Þ¾Æ °¢°¢ÀÇ If Ŭ·¡½º else Ŭ·¡½º µîÀ» ¸¸µé¾î ³»°í, ±×°ÍµéÀ» °ü¸®ÇÏ´Â ¸®½ºÆ®¸¦ Á¦ÀÛÇÏ¿´´Ù. Áö±Ý µ¶ÀÚ°¡ ±ÛÀ» ÀÐÀ¸¸é¼­ ¹º°¡ À߸øµÈ °ÍÀ» ´À³¢Áö ¸øÇÑ µ¶ÀÚ°¡ ÀÖ´Ù¸é C++À» Á¦´ë·Î »ç¿ëÇÏÁö ¸øÇϰí ÀÖ´Â °ÍÀÌ´Ù.

»ó¼ÓÀ̶ó´Â °³³äÀº µé¾î°¬Áö¸¸ »ý°¢Çغ¸¸é ¸ðµç ÄÄÆ÷³ÍÆ®µéÀÌ À¯»çÇÑ ¼Ó¼ºÀ» ¶ç°Ô µÈ´Ù. ÀÌ·¯ÇÑ ÄÄÆ÷³ÍÆ®µéÀÇ »óÀ§¿¡ ÀÎÅÍÆäÀ̽º µÉ Ãß»óÈ­ Ŭ·¡½º°¡ Á¸Àç ÇÑ´Ù¸é ´ÙÇü¼ºÀ» ÅëÇØ¼­ ¸ðµÎ ÇϳªÀÇ ¸®½ºÆ®·Î °ü¸®ÇÒ ¼ö ÀÖ´Ù.

¶Ç, ÇÁ·ÎÁ§Æ®°¡ Á¡Â÷ È®ÀåµÊ¿¡ µû¶ó ÇϳªÀÇ º¯°æ »çÇ×À» °íÄ¡±â À§ÇØ ¸ðµç Ŭ·¡½º¸¦ ¼öÁ¤ÇÒ ÇÊ¿ä¾øÀÌ »óÀ§ ÀÎÅÍÆäÀ̽º°¡ µÇ´Â Ŭ·¡½º¸¸ ¼öÁ¤ÇÏ¸é µÈ´Ù. º°°Í ¾Æ´Ñ °Í °°Àº ÀÌ·± ¼³°è¿¡¼­µµ ¿ì¸®´Â ¸·¿¬ÇÏ°Ô OOPÀÇ C++¾ð¾î¸¦ ´ÜÁö °£´ÜÇÑ ÀÚ·á Ãß»óÈ­ÀÇ µµ±¸·Î »ç¿ëÇϰí ÀÖ´Â °ÍÀÌ ¾Æ´ÑÁö¸¦ »ìÆìº¸¾Æ¾ß ÇÑ´Ù.

´ç½ÅÀÌ C++ °³¹ßÀÚ¶ó¸é Áö±Ý ´ç½ÅÀÇ ÄÚµéÀ» ¿­¾îº¸¶ó. ±× Äڵ忡¼­ ´ÙÇü¼º(Ploymorphism), µ¿Àû ¹ÙÀεù(Dynamic binding), Ŭ·¡½º »ó¼Ó(Inheritance)ÀÌ ³ª¿À´ÂÁö¸¦ È®ÀÎÇØº¸¶ó.

¿©·¯ºÐÀÌ Á¦ÀÛÇÑ Å¬·¡½º°¡ 10°³°¡ ³Ñ¾î°¡°í ÇÑ Å¬·¡½º ¾È¿¡ ¸Þ¼­µå°¡ 15°³ ÀÌ»ó ³Ñ¾î°¡´Â ÄÚµå(¼öÄ¡´Â Ưº°ÇÑ Àǹ̴ ¾ø´Ù. ´ÜÁö ÇÁ·ÎÁ§Æ®ÀÇ Å©±â¿¡ ´ëÇÑ ¸·¿¬ÇÑ Á¤ÀǸ¦ ÇÒ »ÓÀÌ´Ù)¿¡¼­ ´ÙÇü¼º°ú µ¿Àû ¹ÙÀεùÀÌ ¾ø´Ù¸é ´ç½ÅÀº ´ÜÁö C++À» Có·³ »ç¿ëÇϰí ÀÖ´Â °ÍÀÌ´Ù.

  µ¿Àû ¹ÙÀεù(Dynamic binding)

¹ÙÀεùÀ̶õ ´Ü¾î´Â ¾ðÁ¦³ª µéÀ» ¼ö ÀÖ´Â ´Ü¾îÀÌ´Ù. ±×·³ ¹ÙÀεùÀ̶ó´Â °ÍÀº Á¤È®È÷ ¹«¾ùÀ» ÀǹÌÇÏ´Â °ÍÀΰ¡. ¿ø·¡ ¹ÙÀεùÀ̶ó´Â ´Ü¾îÀÇ »çÀüÀûÀÎ Àǹ̴¡®¹­´Ù¡¯ÀÌ´Ù. ±×·³ ¿ì¸®°¡ ¾²´Â ¾ð¾î¿¡¼­ ¹ÙÀεùÀº ¹«¾ùÀ» ÀÇ¹Ì ÇÒ±î. À̰ÍÀº Caller¿Í CalleeÀÇ ÁÖ¼Ò¸¦ ¹­¾îÁÖ´Â °ÍÀ¸·Î »ý°¢ÇÒ ¼ö ÀÖ´Ù.

¸¸¾à ¿ì¸®°¡ DriverEntry()¶ó´Â ÇÔ¼ö¿¡¼­ PassNextToDriver()¶ó°í ÇÔ¼ö¸¦ È£Ãâ ÇÏ¿´´Ù°í »ý°¢Çغ¸ÀÚ(DriverEntry´Â CallerÀ̰í PassNextToDriver´Â CalleeÀÌ´Ù).

PassNextToDriver¶ó´Â ÇÔ¼ö°¡ 0x7FFFFFFF¿¡ À§Ä¡ÇÑ´Ù°í °¡Á¤Çϸé Caller ÂÊ ÄÚµå´Â ¿¡¼Àºí·¯·Î bch 0x7FFFFFFF¿Í °°Àº ½ÄÀ¸·Î ¹ø¿ªµÉ °ÍÀÌ´Ù. ÀÌ·¯ÇÑ °ÍÀ» ¹ÙÀεùÀ̶ó°í ÇÑ´Ù. ´Ù½Ã ¹ø¿ªµÈ ¾î¼Àºí·¯ Äڵ带 »ìÆìº¸¸é ¹Ì¸® ÁÖ¼Ò°¡ µé¾î°¡¾ß ÇÑ´Ù.

ÇÏÁö¸¸ ´ÙÀ̳ª¹Í ¹ÙÀεùÀÇ °æ¿ì ÀÌ·¸°Ô ¹Ì¸® °áÁ¤ÇÏ´Â °ÍÀ» ·±Å¸ÀÓ ½ÃÁ¡À¸·Î ¹ÙÀεùÀ» ¹Ì·ç°í ÇÁ·Î±×·¡¸Ó°¡ ±×·± °ÍÀ» ±¸ÇöÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ¾ð¾îÀûÀÎ ÀÔÀå¿¡¼­ C++ ¾ð¾î ½Ã½ºÅÛÀÌ Ã³¸®ÇÑ´Ù´Â °ÍÀÌ´Ù.

C++¿¡¼­ÀÇ ´ÙÀ̳ª¹Í ¹ÙÀεù°ú ÀÏ¹Ý C¾ð¾î·Î ±¸ÇöµÇ´Â ±¸Á¶ÀûÀÎ ÇÁ·Î±×·¡¹ÖÀÇ Â÷À̸¦ º¸ÀÚ. ½±°Ô Çϱâ À§ÇØ »óÀ§ ÇÁ·ÎÅäŸÀÔÀº ¹Ì¸® Á¤ÀÇµÈ °ÍÀ¸·Î °¡Á¤ÇÑ´Ù.

 <¸®½ºÆ® 2> µ¿Àû ¹ÙÀεù ¿¹Á¦


»ç½Ç ÀÌ Äڵ带 ÀÌÇØÇϱâ À§Çؼ­´Â ´ÙÇü¼º(Polymorphism)À» ¾Ë¾Æ¾ß ÇÏÁö¸¸, ¹Ù·Î µÞ Á¦¸ñ¿¡¼­ À̸¦ ³íÇϰí ÀÖÀ¸´Ï ÀÏ´Ü ³Ñ¾î°¡ÀÚ. Object´Â ABC(Abstraction Base Class)·Î ÀÎÅÍÆäÀ̽º ¿ªÇÒÀ» Çϰí ÀÖÀ¸¸ç ÀÌ´Â ¼ø¼ö °¡»ó ÇÔ¼ö·Î µÇ¾î ÀÖ´Ù. <¸®½ºÆ® 2>¿¡ µé¾î°¡ ÀÖ´Â °¢ ¿øÀÚ Å¬·¡½ºµéÀ» ²¨³»¾î Set PostionÀ» È£Ãâ ÇÏ·Á°í ÇÑ´Ù°í ÇØº¸ÀÚ.

¿ì¸®´Â µÎ °¡ÁöÀÇ Å¸ÀÔÀ» ÅëÇØ ¸®½ºÆ®¿¡ ³Ö¾î µÎ¾ú°í µÎ Ŭ·¡½º¿¡¼­ SetPositionÀÌ °¢°¢ ±¸ÇöµÇ¾î Àִµ¥ while ·çÇÁ ¾È¿¡¼­´Â CDialogObj¶ó´Â ÀÎÅÍÆäÀ̽º·Î ±× ³ëµå¸¦ ¹Þ¾Æ SetPositionÀ» È£ÃâÇÑ´Ù.

¿©·¯ºÐÀº ¾î´À Ŭ·¡½ºÀÇ SetPositionÀ» È£Ãâ Çϰڴ°¡? ÀÌ È£Ãâ¿¡ ´ëÇÑ °ÍÀÌ °¡»óÇÔ¼öÀÌ´Ù. ÀÌ °¡»óÇÔ¼ö´Â µ¿ÀûÀ¸·Î ·±Å¸Àӽÿ¡ ÀÚ½ÅÀÇ Å¸ÀÔÀ» °í·ÁÇÏ¿© ÇÔ¼ö¸¦ ¹ÙÀεù ÇÑ´Ù. À̰ÍÀ» C++¿¡¼­´Â ¸Þ½ÃÁö µð½ºÆÐĪÀ̶ó°í ÇÏ¸ç ¿©±â¼­ ¸»ÇÏ´Â µð½ºÆÐÄ¡´Â win32³ª, µð¹ÙÀ̽º µå¶óÀ̹ö¸¦ °³¹ßÇÏ´Â °³¹ßÀÚµéÀÌ ¾Æ´Â µð½º ÆÐÄ¡ ·çƾ°ú °°´Ù.

¸Þ½ÃÁö¶ó´Â °ÍÀº ¾ð¾î»óÀÇ Ç¥ÇöÀ̸ç, ¿ì¸®´Â ´ÜÁö ÀÎÅÍÆäÀ̽º ÀÔÀå¿¡¼­ ¸Þ¼Òµå Çϳª¸¸ È£Ãâ ÇÒ Å×´Ï ³ª¸ÓÁö´Â ¾ð¾î ½Ã½ºÅÛ »ó¿¡¼­ ó¸® Ç϶ó´Â Àǹ̴Ù. ¸¶Ä¡ ¸Þ½ÃÁö¸¦ ´øÁö´Â °Í°ú À¯»çÇÏ°Ô º¸À̱⠶§¹®ÀÌ´Ù.

ÀÌ·¯ÇÑ µ¿ÀÛ ¹æ½ÄÀº OOPÀÇ ±âº» ¸Þ¼Òµå È£Ãâ ¹æ½ÄÀÌ´Ù. ¾Õ¿¡¼­ À̾߱âÇß´ø Code WizardÀÇ ÇÁ·Î±×·¥ÀÇ ¹®Á¦µµ ÀÌ ¹æ¹ýÀ¸·Î ¼öÁ¤ ÇÒ ¼ö ÀÖ´Ù.

 <¸®½ºÆ® 3> <¸®½ºÆ® 2>¸¦ Á¤Àû¹ÙÀεùÀ¸·Î ó¸®ÇÒ °æ¿ìÀÇ CÄÚµå


C¾ð¾î·Î ÀÛ¼ºµÈ µ¿ÀÏ µ¿ÀÛÀ» ÇÏ´Â Äڵ带 º¸ÀÚ. C¿¡¼­´Â ű׳ª ŸÀÔ¿¡ ´ëÇÑ Á¤º¸°¡ ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù. C¾ð¾î ½Ã½ºÅÛ¿¡¼­ À̸¦ Áö¿ø ÇÏÁö ¾Ê´Â Å¿¿¡ ¿ì¸®°¡ Á÷Á¢ ÇØ¾ß ÇÏ´Â °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ÄÚµå´Â switch¿Í tag¸¦ ÀÌ¿ëÇÑ ºÐ±â·Î °¡´ÉÇÏ´Ù. ½ÇÁ¦·Î MFC °°Àº °æ¿ì ¸Þ½ÃÁö ¸ÊÀ̶ó´Â °ÍÀ» »ç¿ë ÇÒ ¶§ tag¿Í ÇÔ¼ö Æ÷ÀÎÅÍ·Î ÀÌ·¯ÇÑ °ÍÀ» ±¸ºÐÇÑ´Ù.

À̹ø¿¡´Â °³¹ßÀÚ ÀÔÀå¿¡¼­ Á» ´õ °ï¶õÇÑ À̾߱⸦ ÇØº¸ÀÚ. ¿©·¯ºÐÀÌ Code Wizard ÇÁ·ÎÁ§Æ®¸¦ ¼öÇàÇϰí Àִµ¥ °ÅÀÇ ¿Ï¼ºÀÌ´Ù µÇ¾î °¥ ¶§ Âë Ŭ¶óÀÌ¾ðÆ®°¡ ¸¶À½ÀÌ ¹Ù²î¾ú´Ù. while ´ë½Å¿¡ loop¶ó´Â ´ÙÀ̾ó·Î±×·Î º¯°æÇØÁÖ°í, else µîÀÇ ´ÙÀ̾ó·Î±×µµ ³Ö¾î´Þ¶ó°í ÇÑ °ÍÀÌ´Ù.

ÀÌ °æ¿ì, C++¿¡¼­´Â CWhileDlg ´ë½Å CLoopDlg¶ó´Â Ŭ·¡½º·Î º¯°æÇØÁÖ°í (¹°·Ð ÀÎÅÍÆäÀ̽º·ÎºÎÅÍ »ó¼Ó ¹ÞÀº) CElseDlg°¡ Ãß°¡ µÉ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¿©±â¿¡ ÀÎÅÍÆäÀ̽º°¡ Àß ±¸ÇöµÇ°í »ó¼Ó °ü°è°¡ Àß ¿«¾îÁ® ÀÖ´Ù¸é »õ·Î Ãß°¡µÇ´Â ´ÙÀ̾ó·Î±×´Â ´ÜÁö »ó¼Ó¸¸À¸·Î ±¸ÇöÇÒ ¼ö ÀÖ´Ù. Ãß°¡µÈ Ŭ·¡½º À̿ܿ¡ ¸®½ºÆ®ÀÇ Çڵ鿡¼­ º¯È­ÇÏ´Â °ÍÀº ¾Æ¹« °Íµµ ¾ø´Ù.

±×°ÍÀº °¡»óÇÔ¼ö¿Í ´ÙÇü¼º ¶§¹®À̶ó°í ¸» ÇÒ ¼ö ÀÖ´Ù. ¿©±â¿¡¼­´Â °£´ÜÇÑ Äڵ带 ÀÌ¿ëÇÑ ½Ã³ª¸®¿À¸¦ ¿¹·Î µé¾úÁö¸¸, ½ÇÁ¦·Î Å« ÇÁ·ÎÁ§Æ®¿¡¼­ ÀÌ·¯ÇÑ ¹®Á¦´Â À¯Áöº¸¼ö, ½Ã°£ Àη ¸é¿¡¼­ ¿ì¸®ÀÇ »ý°¢º¸´Ù Å« À§Ä¡¸¦ Â÷ÁöÇÑ´Ù. ±×·¯¸é °¡»óÇÔ¼ö¿Í ¹ÐÁ¢ÇÑ °ü·ÃÀÌ ÀÖ´Â ´ÙÇü¼º(Polymorphism)ÀÇ ºÎºÐÀ» »ìÆìº¸µµ·Ï ÇÏÀÚ.

  ´ÙÇü¼º(Polymorphism)

´ÙÇü¼ºÀ̶õ ¹«¾ùÀϱî. ¿Ü±¹À¸·Î ¼öÃâ ÇÏ´Â ÀÚÀü°Å¿Í ³ìÂ÷¸¦ »ý°¢Çغ¸ÀÚ. ÀÌ ÀÚÀü°Å¿Í ³ìÂ÷´Â ´Ù¸¥ Ŭ·¡½º·Î ±¸Çö µÉ ¼ö ÀÖ´Ù. »ç½Ç Ãß»óÈ­ °üÁ¡¿¡¼­ º¸¾Æµµ ÀÌ µÑÀº ¿ÏÀüÈ÷ ´Ù¸£´Ù.

ÇÏÁö¸¸ ´Ù½Ã »ý°¢Çغ¸¸é ¿Ü±¹À¸·Î ¼öÃâ ÇÑ´Ù´Â °üÁ¡¿¡¼­ ÀÌ µÑÀº °°À» ¼öµµ ÀÖ´Ù. ´Ù¸£¸é¼­µµ °°Àº °Í ±×°ÍÀÌ ´ÙÇü¼ºÀÇ °³³äÀÌ´Ù. ¿ì¸®´Â ÀÌ·± ´ÙÇü¼ºÀ» ÅëÇØ Äڵ带 °£°áÇÏ°Ô Çϰí ÀϰüÀûÀÎ °üÁ¡¿¡¼­ Ŭ·¡½º¸¦ °ü¸® ÇÒ ¼ö ÀÖ´Ù.

ÀÎÅÍÆäÀ̽º
¿ì¸®´Â ¿©±â¼­ Àá½ÃC++ÀÇ ÀÎÅÍÆäÀ̽º¸¦ »ý°¢Çغ¸°í ³Ñ¾î°¡¾ß ÇÑ´Ù. ÀÌ¹Ì ¾Ë°í ÀÖ´Â °Íó·³ C++¿¡´Â ÀÎÅÍÆäÀ̽º°¡ ¾ø´Ù.±×·¸´Ù°í ÇØ¼­ C++À» °¡Áö°í ´ÙÇü¼ºÀ» »ç¿ëÇÏÁö ¸øÇÏ´Â °ÍÀº ¾Æ´Ï´Ù.

¿Ö ÀÎÅÍÆäÀ̽º¶ó´Â À¯¿ëÇÑ °³³äÀÌ C++¿¡´Â ¾ø´Â °ÍÀϱî? ÀÌ´Â C++ÀÇ Å»ý°ú ¿¬°üµÈ´Ù. 1980³âµµ¿¡ º§¿¬±¸¼ÒÀÇ ½ºÆ®¶ó¿ì½ºÆ®·´¿¡ ÀÇÇØ C++ÀÌ ¸¸µé¾îÁú ¶§´Â C¾ð¾î¿¡ ±â¹ÝÇÑ °´Ã¼ ÁöÇâ ¾ð¾î¸¦ ¸¸µé°íÀÚ ÇÏ´Â °ÍÀÌ ¾Æ´Ï¾ú´Ù. ¾Õ¼­ ¼³¸í ÇÑ ¹Ù ÀÖµíÀÌ C¾ð¾î¿¡ ´ÜÁö ÀÚ·á Ãß»óÈ­ ±â´ÉÀ» Ãß°¡Çϱâ À§Çؼ­ Á¦ÀÛÇÑ °ÍÀÌ C++ÀÇ ÃÊâ±â ¾ð¾îÀÎ C with data abstractionÀÌ´Ù.

ÀÌ¿¡ ±×´Â °´Ã¼ ÁöÇâÀû ¾ð¾îÀÇ ÀåÁ¡À» »ì·Á C++ Release 1.0À» 1986³â¿¡ ¸®ºñÁ¯Çß´Ù. C++ÀÇ Å»ýÀÌ ÀýÂ÷Àû ¾ð¾îÀÎ C¶ó´Â °ÍÀº ÀÚ¹Ù¿¡ ºñÇϸé Ä¡¸íÀûÀÎ ¾àÁ¡À» °¡Áø´Ù. 1980³â´ë¿¡ Á¦À۵DZ⠽ÃÀÛÇÑ C++Àº ÃÊâ±â °´Ã¼ÁöÇâÀû ¾ð¾î °³³äÀÌ ¼º¼÷ÇÏÁö ¸øÇÑ ½ÃÁ¡¿¡¼­ ³Ê¹« ÀÏÂï »ý¼ºµÈ Å¿¿¡ ÀÎÅÍÆäÀ̽º¿¡¼­ ºüÁö°Ô µÈ °ÍÀÌ´Ù.

¿ì¸®°¡ C++ÀÇ ¿ª»ç¸¦ À̾߱âÇÏ·Á´Â °ÍÀÌ ¾Æ´Ï¹Ç·Î ÀÌÂë¿¡¼­ ±¸Çö À̾߱â·Î ³Ñ¾î°¡º¸ÀÚ. ±×·¯¸é C++¿¡¼­´Â ÀÎÅÍÆäÀ̽º¸¦ ¾î¶»°Ô Èä³»³»¾ß ÇÒ±î. C++¿¡¼­ Ŭ·¡½º¸¦ ±¸ÇöÇÒ °æ¿ì ÀÎÅÍÆäÀ̽º°¡ ´Â ±¸Ã¼È­µÈ Ŭ·¡½º·Î ±¸ÇöµÇ¾î¾ß ÇÑ´Ù. ÀÌ Å¬·¡½º¿¡ ¼ÓÇÏ´Â ¸ðµç ÇÔ¼ö´Â ¼ø¼ö °¡»ó ÇÔ¼ö·Î ¼±¾ðµÇ¾î¾ß ÇÑ´Ù.

¿ì¸®°¡ »ç¿ëÇÒ ÄÁÅ×À̳ʸ¦ °£´ÜÇÑ ¸®½ºÆ®·Î Á¦ÀÛÇÑ´Ù°í °¡Á¤Çغ¸ÀÚ. óÀ½ ¿ì¸®°¡ ÇØ¾ß ÇÒ ÀÛ¾÷Àº ¿ì¸®ÀÇ ¸®½ºÆ®¿¡ µé¾î°¥ °³Ã¼¸¦ Ŭ·¡½º·Î ÀÚ·á Ãß»óÈ­¸¦ ÇØ¾ß ÇÑ´Ù.

À̰ÍÀº ´ÜÁö Ŭ·¡½º¸¦ »ç¿ëÇÏ´Â °Í ¿Ü¿¡ ´ÙÇü¼ºÀ» »ç¿ëÇÏ´Â ±âÃʰ¡ µÈ´Ù. ÀÌ ¸®½ºÆ®¿¡ µé¾î°¥ ³»¿ëµéÀº ¾Æ·¡ ¿øÀÚ°¡ µÇ´Â °ÍÀ» »ó¼Ó ¹Þ¾Æ ±¸ÇöÇÏ°Ô µÉ°ÍÀÌ´Ù. ÀÌ·¯ÇÑ Á¢±ÙÀº ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÑ ´ÙÇü¼º ¸®½ºÆ®¿Í °°Àº ¸Æ¶ô¿¡¼­ ÀÌÇØµÉ ¼ö ÀÖ´Ù.

 <¸®½ºÆ® 4> ´ÙÇü¼ºÀÇ ÃÖ»óÀ§ ºñ ´Ü¸» ³ëµå Object Interface


<¸®½ºÆ® 4>´Â ¸®½ºÆ®ÀÇ ±Ù°£ÀÌ µÉ µÎ °¡Áö ÀÎÅÍÆäÀ̽º¸¦ »ý¼ºÇß´Ù. ÀÌ·± ¸®½ºÆ®¸¦ ¼±¾ðÇÒ ¶§¿¡´Â ¸î °¡Áö¸¦ ÁÖÀÇÇØ¾ß ÇÑ´Ù. ¸ðµç Ŭ·¡½ºÀÇ ³»ºÎ ¸â¹ö¿Í returnÀº PointerÀÓÀ» »ìÆìº¸ÀÚ. ¿Ö Pointer·Î¸¸ ±¸¼º µÇ¾î ÀÖÀ»±î? ÀÌ´Â OOPÀÇ ´ÙÇü¼º °³³äÀ» »ç¿ëÇϱâ À§ÇØ ÇʼöÀûÀÎ ¾ÆÀÌÅÛÀÌ´Ù.

´ÙÇü¼ºÀ» ÀÌ·ç±â À§Çؼ­´Â »óÀ§ ÀÎÅÍÆäÀ̽ºÀÇ ÀÔÀå¿¡¼­ ÇÚµé¸µÇØ¾ß Çϴµ¥ µ¿ÀûÀ¸·Î ¹ÙÀεùÇϱâ À§Çؼ­´Â ÀÔÃâ·ÂÀÌ Æ÷ÀÎÅÍ·Î µÇ¾î¾ß ÇÑ´Ù. °£È¤ ÀÚ¹Ù ÇÁ·Î±×·¡¸Ó³ª ´Ù¸¥ ¿©Å¸ ÇÁ·Î±×·¡¸Ó°¡ Æ÷ÀÎÅ͸¦ ¾²´Â °ÍÀ» Á˾ÇÀÎ ÄÚµå·Î ºÐ·ù Çϰí ÀÖÁö¸¸, C++¿¡¼­´Â µ¿Àû ¹ÙÀεùÀ» À§ÇØ Æ÷ÀÎÅ͸¦ »ç¿ëÇÑ´Ù.

¿©±â Æ÷ÀÎÅÍÀÇ °³³äÀº ÁÖ¼Ò ¹øÁö¸¦ °¡¸®Å°´Â Çڵ鷯¶ó±â º¸´Ù ´ÜÁö ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇϱâ À§ÇÑ µµ±¸¶ó°í »ý°¢ÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¹°·Ð Æ÷ÀÎÅÍ¿¡ ´ëÇÑ À§Çè »çÇ×, Áï ³»ºÎ ¸â¹öÀÇ Æ÷ÀÎÅ͸¦ ¹ÝȯÇѴٰųª µ­±Û¸µ Æ÷ÀÎÅ͸¦ ¹ÝȯÇÏ´Â ÀÏÀº ¾øµµ·Ï ÇØ¾ß ÇÒ °ÍÀÌ´Ù.

ÀÎÅÍÆäÀ̽º¸¦ ¼±¾ðÇßÀ¸´Ï ÀÌÁ¦ ³»ºÎ¸¦ ä¿ö ³ÖÀ» ±¸Ã¼È­ Ŭ·¡½º¸¦ ±¸ÇöÇØº¸ÀÚ. ±¸Ã¼È­ Ŭ·¡½º´Â ±âº»ÀûÀÎ ¸®½ºÆ® µ¿ÀÛÀ» ±¸ÇöÇÏ´Â µðÆúÆ® ¾ÆÀÌÅÛ°ú ±× µðÆúÆ® ¾ÆÀÌÅÛÀ¸·ÎºÎÅÍ »ó¼Ó ¹Þ¾Æ ±¸¼º ¿øÀÚÀÇ ³»¿ëÀ» ±¸ÇöÇÏ´Â ±¸Ã¼È­ Ŭ·¡½º·Î ³ª´· ¼ö ÀÖ´Ù.

ÀÌ·Î½á ¿ì¸®´Â ÀÌ ¸®½ºÆ®¿¡ CListItemÀ̶ó´Â ÀÎÅÍÆäÀ̽º·ÎºÎÅÍ »ó¼Ó ¹ÞÀº ¸ðµç Ŭ·¡½ºµéÀ» ³Ö¾î °ü¸®ÇÒ ¼ö ÀÖ´Ù.

 <¸®½ºÆ® 5> ¸®½ºÆ® ¾ÆÀÌÅÛÀÇ ½ÇÁ¦ ±¸Ã¼È­ Ŭ·¡½º


<¸®½ºÆ® 6>ÀÇ ¼¼ °¡Áö ¾ÆÀÌÅÛÀ» ±¸ÇöÇϱ⸸ Çϸé ÀÌÁ¦ ¸®½ºÆ®¿¡¼­ ¾ÆÀÌÅÛÀ» ¸ðµÎ ¸®½ºÆ®·Î °ü¸® ÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ ´ÙÁß »ó¼ÓÀ» ÅëÇÏ¿© ÀÚ½ÅÀÇ ºÎ¸ð Ŭ·¡½º°¡ ¸®½ºÆ®¸¦ À§ÇÑ Object »Ó¸¸ ¾Æ´Ï¶ó, ´ÙÀ̾ó·Î±×ÀÇ ¼Ó¼ºÀ» ±×´ë·Î »ó¼Ó¹ÞÀ» ¼öµµ ÀÖ´Â °ÍÀÌ´Ù. ¹°·Ð ´ÙÁß »ó¼ÓÀº ½ÅÁßÇØ¾ß ÇÑ´Ù.

»ç½Ç ÇÊÀÚ´Â ´ÙÁß »ó¼ÓÀÇ ¹®Á¦´Â °´Ã¼ÁöÇâ¿¡¼­ ¿Ã¹Ù¸£Áö ¾Ê´Ù°í »ý°¢ÇÏÁö¸¸, ÀÌ ºÎºÐ¿¡ ´ëÇÑ ³íÀÇ´Â ´ÙÀ½¿¡ ±âȸ°¡ µÇ¸é ´Ù½Ã Çϵµ·Ï ÇÏÀÚ.

 <¸®½ºÆ® 6> ¼¼ Á¾·ùÀÇ ±¸Ã¼È­ Ŭ·¡½º


ÀÌÁ¦ ¸®½ºÆ®¿Í ±¸¼º ¿øÀÚµéÀÌ ¸ð¿´À¸´Ï À̸¦ »ç¿ë ÇØº¸ÀÚ. <¸®½ºÆ® 7>À» º¸¸é À̰ÍÀÌ ¾ó¸¶³ª ±ò²ûÇÏ°í Æí¸®ÇÏ°Ô »ç¿ë µÉ ¼ö ÀÖ´ÂÁö ¾Ë ¼ö ÀÖ´Ù.

 <¸®½ºÆ® 7> µ¿Àû ¹ÙÀεùÀ» À§ÇÑ main ÇÔ¼ö


  »ç¶÷À» µ¿¹°·Î, ½Ä¹°À» ½ÅÀ¸·Î..º¯È­ÀÇ Å¸ÀÔ Ä³½ºÆÃ

¿ì¸®°¡ ÈçÈ÷ »ç¿ëÇϴ ŸÀÔ Ä³½ºÆÃ(Type casting)¿¡ ´ëÇØ »ý°¢Çغ¸ÀÚ. ÀýÂ÷ÀûÀÎ ¾ð¾î»ó¿¡¼­ Á¶Â÷ ŸÀÔ Ä³½ºÆÃÀº ¹Î°¨ÇÏ°íµµ Á˾ÇÀûÀÎ »çÇ×ÀÌ´Ù. Çб³¿¡¼­µµ Çö¾÷¿¡¼­µµ ¾²Áö ¸»¶ó°í ±×·¸°Ô À̾߱âÇØµµ ¾µ ¼ö¹Û¿¡ ¾ø´Â °ÍÀÌ Å¸ÀÔ Ä³½ºÆÃÀÌ´Ù.

ÄÚµå¶ó´Â °ÍÀº ÀÛ¼ºÇϸ鼭ºÎÅÍ ½Ã°£ÀÌ Áö³¯¼ö·Ï µ¹ÀÌų ¼ö ¾ø´Â »óűîÁö º¹ÀâÇØÁö°Ô ¸¶·ÃÀÌ´Ù. ŸÀÔ Ä³½ºÆÃÀº ¹Ì¼÷ÇÑ Çлý¿¡°Ô´Â ¹Ì¼÷ÇÑ ´ë·Î, ¹Ù»Û Çö¾÷ÀÇ ÇÁ·Î±×·¡¸Ó¿¡°Ô´Â ½Ã°£ÀÌ ºÎÁ·ÇÑ´ë·Î ÀÔ¸À¿¡ ¸ÂÃç »ç¿ëµÈ´Ù.

CÀÇ Å¸ÀÔ Ä³½ºÆÃ ¹®Á¦
ÀÌ·¯ÇÑ C ¾ð¾î»ó¿¡¼­ ŸÀÔ Ä³½ºÆÃÀÌ À߸ø »ç¿ëµÇ´Â ¿¹¸¦ º¸ÀÚ. ÆÄÀÏ ½Ã½ºÅÛ ¾Æ·¡ Disk Class driver¿¡ ÇÊÅ͸¦ ¾ñ¾î¼­ ÀÛ¾÷À» ÇÑ´Ù°í °¡Á¤ÇÏÀÚ. ±×¸®°í »óÀ§ DeviceIoControl·Î ¿ì¸®¿¡°Ô ÇÊ¿äÇÑ ÁÖ¼Ò µ¥ÀÌÅ͸¦ ÁÖ´Â ¾ÖÇø®ÄÉÀ̼ÇÀº ´Ù¸¥ ÇÁ·Î±×·¡¸Ó°¡ Á¦ÀÛÇÑ´Ù°í °¡Á¤ÇÑ´Ù.

¿ì¸®°¡ °¡°øÇÒ Á¤º¸µéÀÌ ´ã±ä °ÍÀº ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ DeviceIoControl·Î ³»·Á ÁÖ´Â ÁÖ¼Ò °ª°ú ÆÄÀÏ ½Ã½ºÅÛ¿¡¼­ ³»·ÁÁÖ´Â ÁÖ¼Ò °ªÀ» ºñ±³ÇÏ¿© ÀÏÄ¡ÇÒ ¶§ ƯÁ¤ ÀÛ¾÷À» ¼öÇàÇÏ·Á°í ÇÑ´Ù°í »ý°¢Çغ¸ÀÚ. ¿ì¸®°¡ ±¸ÇöÇÒ ¶§ ÆÄÀÏ ½Ã½ºÅÛÀÌ ³»·ÁÁÖ´Â ÁÖ¼Ò °ªÀº 32ºñÆ® unsigned long °ªÀ¸·Î ÁÖ¼Ò°¡ À½¼ö·Î Á¸Àç ÇÏÁö ¾Ê±â ¶§¹®¿¡ ¹®Á¦°¡ ¾ø´Ù.

ÇÏÁö¸¸ ¿©±â¿¡¼­´Â ÁÖ¼Ò°ªÀ» 32ºñÆ®·Î ó¸®ÇÏµÇ Æ¯º°ÇÑ ¹®Á¦°¡ ¾ø¾î º¸ÀÌ´Â longÀ¸·Î ó¸®Çß´Ù°í »ý°¢Çغ¸ÀÚ.

 <¸®½ºÆ® 8> ÁÖ¼Ò °ªÀ» ºñ±³ÇÏ¿© ƯÁ¤ÇÑ ·çƾÀ» ¼öÇàÇÏ´Â µå¶óÀ̹ö ÄÚµå


ÀÌ·¯ÇÑ °æ¿ì¿¡ ºÎÈ£ ºñÆ®¸¦ °¡Áö´Â ŸÀÔÀ» ŸÀÔ Ä³½ºÆÃ ÇÏ¿©ºÎÈ£°¡ ¾ø´Â ŸÀÔ¿¡ ³ÖÀ¸·Á°í ÇÏ¸é ¾Õ¿¡¼­ ¸»ÇÑ °Í°ú °°Àº ¾Ë°í¸®ÁòÀº ÀüÇô µ¿ÀÛ ÇÏÁö ¾Ê´Â´Ù. unsigned long¿¡ signed longÀÇ ÁÖ¼Ò °ªÀ» ³ÖÀ¸·Á°í ÇÒ °æ¿ì ÄÄÆÄÀÏ·¯¿¡ µû¶ó Á¶±Ý¾¿ ´Ù¸£±â´Â ÇÏÁö¸¸ ´ëºÎºÐÀÇ ÄÄÆÄÀÏ·¯°¡ ºÎÈ£ Á¤º¸¸¦ ÀÒ¾î¹ö¸®Áö ¾Ê±â À§Çؼ­ ºÎÈ£·Î Á¸ÀçÇÏ´Â ¡®1¡¯ºñÆ®¸¦ ¸ðµÎ ä¿ö ³Ö¾î¹ö¸®±â ¶§¹®¿¡ °ªÀÌ ¿ÏÀüÈ÷ ´Þ¶óÁö´Â °ÍÀÌ´Ù.

»óÀ§ Äڵ忡¼­ ŸÀÔ Ä³½ºÆÃÀÌ Â÷ÁöÇÏ´Â Á߿伺ÀÌ Å©Áö ¾ÊÀº °Íó·³ ´À²¸Áú ¼ö µµ ÀÖÁö¸¸, ÀÓº£µðµå³ª Ä¿³Î µå¶óÀ̹ö °³¹ß ½Ã¿¡ »ý°¢º¸´Ù Áö·çÇÑ µð¹ö±ë ÀÛ¾÷À» °¡Á® ¿À°Ô ÇÏ´Â ¿ä¼Ò°¡ µÉ ¼ö ÀÖ´Ù.

ÀÌ·¯ÇÑ Å¸ÀÔ Ä³½ºÆÃÀÇ ÀÚüÀûÀÎ ¹®Á¦ ¸»°íµµ ŸÀÔ Ä³½ºÆÃ¿¡´Â ÄÚµå »ó¿¡ Á¸Àç ÇÏÁö¸¸ °¡½ÃÀûÀ¸·Î ´«¿¡ º¸ÀÌÁö ¾Ê´Â´Ù´Â °ÍÀÌ Áß¿äÇÏ´Ù. ÇÁ·Î±×·¡¸ÓµéÀº °¡²û ÀÚ½ÅÀÇ Äڵ尡 ¸ðµÎ ÀÚ½ÅÀÇ ¼Õ¹Ù´Ú À§¿¡ ÀÖ´Ù°í Âø°¢ÇÏ´Â °æ¿ì°¡ ¸¹´Ù.

´ç¿¬È÷ µð¹ö±ë ½Ã ¸í½ÃµÈ ŸÀÔ Ä³½ºÆÃ Á¤µµ´Â ³í¸®Àû ¹®Á¦ ÇØ°áº¸´Ù ÈξÀ µÞÀüÀÌ´Ù. ÇÏÁö¸¸ µð¹ö±ë ½Ã °©Àڱ⠰ªÀÌ µÚ ¹Ù²î´Â °æ¿ì³ª ¼öÄ¡ÀÇ ºñ±³ »ó¿¡¼­ °ªÀÌ Æ²¾îÁö´Â °æ¿ì, ³í¸®Àû ¹®Á¦º¸´Ù ŸÀÔ Ä³½ºÆÃÀÇ Æ÷¼ÇÀÌ ÈξÀ ³ô´Ù.

ŸÀÔ Ä³½ºÆÃÀÌ C++¿¡¼­ °¡Áö´Â ÀǹÌ
ŸÀÔÀº C++¿¡¼­´Â ÇϳªÀÇ Å¬·¡½º¸¦ ÀǹÌÇÑ´Ù. À̰ÍÀº °´Ã¼ÁöÇâÀûÀÎ ÀÔÀå¿¡¼­ º¸¾ÒÀ» ¶§ C¾ð¾îÀÇ Å¸ÀÔ Ä³½ºÆÃ°ú´Â ºñ±³µµ¾È µÉ ¸¸Å­ Å« ¹®Á¦·Î µ¿ÀÛ ÇÑ´Ù.

¿¹¸¦ µé¾î ¾ÆµéÀ̶ó´Â Ŭ·¡½º¸¦ ¾Æ¹öÁö·ÎºÎÅÍ »ó¼Ó ¹Þ¾Ò´Âµ¥ ŸÀÔ Ä³½ºÆÃÀ» ÀÌ¿ëÇØ À̸¦ ´Ù½Ã ¾Æ¹öÁö·Î ¹Ù²Û´Ù°í »ý°¢Çغ¸ÀÚ. ¾Æ¹öÁö´Â ¾ÆµéÀÌ µÉ ¼ö ÀÖ°í ¾ÆµéÀº ¾Æ¹öÁö·Î ±× º»Áú ÀÚü¸¦ º¯°æÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ »ç¶÷À¸·Î ¸¸µé¾î³õÀº CPeopleÀ̶ó´Â Ŭ·¡½º¿¡ CDog dog = (CDog *)people; À̶ó´Â Äڵ带 ½á¼­ ±× ÀÚü¸¦ º¯°æÇÒ ¼öµµ ÀÖ´Ù.

ÀÌ´Â ÄÚµå»óÀÇ ¾ð¾îÀûÀÎ ¹®Á¦¸¦ ³Ñ¾î °´Ã¼ º»Áú ÀÚü°¡ º¯°æµÇ´Â ¸»µµ ¾È µÇ´Â Çö»óÀ» ¾ß±â ÇÑ´Ù. »ç¶÷ÀÌ ÇÑ ¼ø°£¿¡ °³³ª µ¿¹°·Î º¯ÇÑ´Ù´Â °ÍÀÌ Á¤»óÀΰ¡? C++¿¡¼­´Â ŸÀÔ Ä³½ºÆÃÀÌ Å¸ÀÔÀ» º¯°æÇÏ´Â °ÍÀ» ³Ñ¾î »ç¶÷À» ½Ä¹°·Î »ç¶÷À» µ¿¹°·Î º¯Çü ÇÒ ¼ö Àִ Ű¿öµå¶ó´Â Á¡À» ¸í½ÉÇØ¾ß ÇÑ´Ù.

¾ÆÄ§¿¡ Ãâ±ÙÇÏ¿´´õ´Ï ³» Á÷Àå µ¿·áµéÀº ´Ù ¾îµð °¡°í È­Ãʵ鸸 Ã¥»ó ¾Õ¿¡ ¾É¾Æ ÀÖ´Â ²ÃÀÌ µÈ´Ù. ´Ù½Ã ÇÑ ¹ø ¸»ÇÏÁö¸¸ ÇÁ·Î±×·¡¸Ó´Â ½ÅÀÌ ¾Æ´Ï´Ù.

C++ ½ºÅ¸ÀÏÀÇ Å¸ÀÔ Ä³½ºÆÃ
½Ã°£¿¡ Âѱâ°í »ç¶÷¿¡ Ä¡À̸鼭 ÇÁ·ÎÁ§Æ®°¡ ÁøÇàµÇ¸é µÉ¼ö·Ï Á˾ÇÀÎ Äڵ带 ½á³»·Á °¥ ¼ö ¹Û¿¡ ¾ø´Â °ÍÀÌ ¶ÇÇÑ ÇÁ·Î±×·¡¸ÓÀÇ ¼÷¸íÀÌ´Ù. ¿ì¸®´Â C++À» ¾²¸é¼­ ¾î¿ ¼ö ¾øÀÌ Å¸ÀÔ Ä³½ºÆÃÀ» °­ÇàÇÏ¿©¾ß ÇÏ´Â °æ¿ì°¡ ÀÖ´Ù. ÀÌ·¯ÇÑ °æ¿ì¿¡ ¿ì¸®´Â ¾î¶»°Ô ±× Ä¡¸íÀûÀÎ ¾àÁ¡À» Á¶±Ý À̳ª¸¶ ÁÙÀ̰í, C++¿¡¼­ Áö¿øÇϴ ŸÀÔ Ä³½ºÆÃÀ» »ç¿ëÇØ¾ß ÇÏ´ÂÁö¿¡ ´ëÇØ »ý°¢Çغ¸ÀÚ.

ŸÀÔ Ä³½ºÆ®ÀÇ °æ¿ì¿¡ Å©°Ô ³× °¡ÁöÀÇ ¿ªÇÒÀ» Çϴ ij½ºÆÃÀ¸·Î ºÐ·ù ÇØ º¸ÀÚ(»ç½Ç ÀÌ·¯ÇÑ ³× °¡Áö Á¾·ù´Â C++¿¡¼­ Áö¿øÇÑ´Ù).

1) ÀϹÝÀûÀΠŸÀÔ Ä³½ºÆÃ
2) const¿Í °°Àº ÇÑÁ¤ÀÚ Å¸ÀÔ Ä³½ºÆÃ
3) »ó¼Ó °ü°è¸¦ °¡Áø °èÃþ¿¡¼­ »ç¿ëÇϴ ij½ºÆÃ
4) ÇÔ¼ö Æ÷ÀÎÅÍÀÇ Ä³½ºÆÃ

¸ÕÀú, ÀÌ·¯ÇÑ Ä³½ºÆÃÀº ¾î¶² ¹æ½ÄÀ¸·Î »ç¿ëÇØ¾ß ÇÏ´ÂÁö¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ. º¸Åë ŸÀÔ Ä³½ºÆÃÀ» ÇÒ ¶§¿¡´Â ´ÙÀ½°ú °°Àº Syntax·Î ÁøÇàÇÑ´Ù.

C½ºÅ¸ÀÏÀÇ Å¸ÀÔ Ä³½ºÆÃ : (type) Expression;

ÀÌ·¯ÇÑ Å¸ÀÔ Ä³½ºÆÃÀ» ¾²Áö ¾Ê°í C++ ¿¡¼­´Â ¾Æ·¡¿Í °°ÀÌ »ç¿ë ÇÑ´Ù.

C++ ŸÀÔ Ä³½ºÆÃ : static_cast(Expression);

Unsigned ŸÀÔ  

ŸÀÔÀ» À̾߱âÇÏ´Ù º¸´Ï unsigned °ü·Ã ³»¿ëÀÌ ³ª¿Í¼­ ÇѸ¶µð ´õ ºÙÀÌ°í ³Ñ¾î°¡°í ÀÚ ÇÑ´Ù. ´ÙÀ½°ú °°Àº unsigned ŸÀÔÀ» »ý°¢Çغ¸ÀÚ. ÀÌ ÇÔ¼ö´Â µð¹ÙÀ̽º µå¶óÀ̹ö ´Ü¿¡¼­ ¼ÒÆÃ µÇ¾î µé¾î¿À´Â ¹è¿­ÀÇ ÀڷḦ ÀÌÁø Ž»öÇϱâ À§ÇØ ÀÛ¼ºµÆ´Ù.

µð¹ÙÀ̽º µå¶óÀ̹ö °³¹ßÀÚµé, ƯÈ÷ ÆÄÀÏ ½Ã½ºÅÛ °³¹ßÀÚµéÀº unsigned°ªÀ» ¸¹ÀÌ »ç¿ëÇÑ´Ù. ÀÌ´Â ÆÄÀÏ ½Ã½ºÅÛ°ú °ü·ÃµÈ ÁÖ¼Ò Á¤º¸´Â À½¼ö °ªÀ» °¡Áö´Â °æ¿ì°¡ µå¹°±â ¶§¹®ÀÌ´Ù.

Int binary_search(int *arr, long arr_len, int item)
{
unsigned long lower = 0L
unsigned long upper = (unsigned long) arr_len;
unsigned long mid;
ASSERT(arr_len >= 1L, "binary_search expects arrays
of length >= 1");
do {
mid = (lower + upper) / 2L
// ÇöÀç ºñ±³ÇÒ °ªÀ» À§ÇØ ¹ÝÀ» Àß¶ó Áß°£ À妽º °ªÀ» ã´Â´Ù.
if (item < arr[mid])
// ¼ÒÆÃÀÌ µÇ¾î ÀÖÀ¸¹Ç·Î midÀÇ °ªºÎÅÍ ºñ±³ÇÒ ´ë»óÀÇ item °ª°ú ºñ±³ÇÑ´Ù.
lower = mid + 1
// Áß°£Ä¡ º¸´Ù Å©¹Ç·Î lower°ªÀ» mid ¹Ù·Î »óÀ§ À妽º·Î Á¤ÇÑ´Ù.
else if (item < arr[mid])
upper = mid - 1
// Áß°£Ä¡ º¸´Ù ÀÛÀ¸¹Ç·Î upper°ªÀ» ÇöÀç mid°ªº¸´Ù ÇÑ´Ü°è ¾Æ·¡ À妽º·Î ÀâÀ½
else /* exact match */
return mid;
// °ªÀ» ã¾Ò´Ù.
} while (upper < lower);
// Base condition , ¼­Ä¡°¡ ³¡³ª¼­ Upper¿Í Lower Ç÷¡±×ÀÇ À§Ä¡°¡ µÚÁý¾îÁö¸é Á¾·á
}

´«½ä¹Ì ÀÖ´Â µ¶ÀÚ¶ó¸é ±Ý¹æ ã¾Ò°ÚÁö¸¸ Base condition¿¡¼­ ºñ±³ µÇ´Â upper°ªÀº °è¼Ó 1¾¿ °¨¼ÒÇÏÁö¸¸ ÀÌ ¾Ë°í¸®ÁòÀº Àý´ë ¸ØÃßÁö ¾Ê°í ¹«ÇÑ´ë·Î µ¿ÀÛÇÑ´Ù. Á¤´äÀº Äڵ忡 ÀÖÀ¸´Ï Á÷Á¢ ã¾Æº¸ÀÚ.



¿ì¸®´Â ÀϹÝÀûÀΠŸÀÔ Ä³½ºÆÃÀ» ÇÒ ¶§ static_cast¶ó´Â Ű¿öµå¸¦ »ç¿ë ÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â C¾ð¾îÀÇ ÀϹÝÀûÀΠij½ºÆÃ°ú °°ÀÌ µ¿ÀÛÇÑ´Ù. ´ë½Å ¼Ò½º¿¡¼­´Â È®¿¬ÇÏ°Ô ´«¿¡ ¶ç°Ô µÈ´Ù. <¸®½ºÆ® 9>¸¦ »ìÆìº¸ÀÚ.

 <¸®½ºÆ® 9> C++ ½ºÅ¸ÀÏÀÇ Å¸ÀÔ Ä³½ºÆÃ ¿¹


¿ì¸®´Â ÀÌ·¯ÇÑ Ä³½ºÆÃÀ» ÅëÇØ¼­ ¾îµå·¹½ºÀÇ ¿¬»ê ½Ã ŸÀÔ Ä³½ºÆÃ¿¡ ´ëÇÑ Á¸Àç°¨À» È®½ÇÈ÷ ´À³¥ ¼ö ÀÖ´Ù. ¶Ç, ´Ù¾çÇÑ Ä³½ºÆÃ ¿¬»êÀÚ¸¦ ÅëÇØ ij½ºÆÃµÇ´Â ¹üÀ§¸¦ 1/4·Î ÁÙ¿©¼­ »ý°¢ÇÒ ¼ö ÀÖ´Ù. static_castÀÇ °æ¿ì Ŭ·¡½º³ª ½ºÆ®·°Ã³¸¦ ±âº» ŸÀÔÀ¸·Î º¯È¯ ÇÒ¼ö ¾øÀ¸¸ç, C¿Í °°ÀÌ ±âº» ŸÀÔÀ» ±âº»Å¸ÀÔÀÇ Æ÷ÀÎÅÍ·Î º¯È¯ ÇÒ ¼ö ¾ø´Ù.

´ÙÀ½À¸·Î const_cast¸¦ »ìÆìº¸ÀÚ. ¿ì¸®´Â C++À» »ç¿ëÇϸ鼭 volatile µîÀÇ Å°¿öµå¸¦ »ç¿ëÇÏ°Ô µÈ´Ù. ÀÌ´Â ÄÄÆÄÀÏ·¯°¡ ÃÖÀûÈ­ ÇÒ ¼ö ¾øµµ·Ï Çϴ Ű¿öµåÀÌÀÚ, ij½Ã¸¦ »ç¿ëÇÏÁö ¾Ê°í ÀνºÆ®·°¼ÇÀ» ¸Þ¸ð¸®·ÎºÎÅÍ ¹Ù·Î »ç¿ëÇÏ°Ô ÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ÀÌ·¯ÇÑ volatileÀÇ Å¸ÀÔÀ» º¯È¯Çϱâ À§Çؼ­´Â const_cast¸¦ »ç¿ë ÇÒ ¼öÀÖ´Ù.

¼¼ ¹øÂ°·Î dynamic_cast¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ. ÀÌ Ä³½ºÆÃÀº ÇÊÀÚ °³ÀÎÀûÀ¸·Î´Â ÁÁ¾ÆÇÏÁö ¾Ê´Â Á¾·ùÀÌ´Ù. ¿ì¸® ¾Æ¹öÁö¸¦ ÇÊÀÚ·Î º¯È¯ÇÏ°Ô Çϴ ij½ºÆÃÀ̱⠶§¹®ÀÌ´Ù. »ó¼Ó°ü°è¸¦ °¡Áø Ŭ·¡½º °ü°è¿¡¼­¸¸ ij½ºÆÃÀÌ °¡´ÉÇϸç, ´Ù¸¥ °÷¿¡¼­´Â »ç¿ë µÇÁö ¾Ê´Â´Ù.

¸¶Áö¸·Àº reinterpret_castÀÌ´Ù. ÀÌ ¿¬»êÀÚ´Â ÇÔ¼ö Æ÷ÀÎÅÍ µîÀ» º¯°æÇÏ°Ô ÇÒ ¶§ »ç¿ëÇϴµ¥ ÀÌ·¯ÇÑ ¿¬»êÀÚ°¡ Àû¿ëµÈ ÄÚµåµéÀº ÄÄÆÄÀÏ·¯¿¡ µû¶ó ´Ù¸£°Ô µ¿ÀÛÇÑ´Ù. ÇÔ¼ö Æ÷ÀÎÅ͸¦ ÀÚÁÖ »ç¿ëÇÏ´Â ÇÊÀڷμ­´Â °³ÀÎÀûÀ¸·Î ¾Æ³¢´Â ŸÀÔ Ä³½ºÆÃÀÌÁö¸¸, ÄÚµåÀÇ À̽ļºÀÌ ºÒ°¡ÇÏ´Ù´Â ÀÌÀ¯·Î Àß »ç¿ë µÇÁö ¾Ê´Â ij½ºÆÃ ¹æ¹ý Áß¿¡ ÇϳªÀÌ´Ù.

¼¼ºÐÈ­µÈ ŸÀÔ Ä³½ºÆÃÀº ŸÀÔ Ä³½ºÆÃÀ» º¸ÆíÈ­Çϰųª ÇÁ·Î±×·¡¸ÓÀÇ ±ÞÇÑ ¸¶À½À» ÇÕ´çÈ­ ½ÃŰ´Â µµ±¸°¡ ¾Æ´Ï´Ù. ´ÜÁö ÀϹÝÀûÀΠŸÀÔ Ä³½ºÆÃÀÇ ÆóÇØ¸¦ Á¶±ÝÀÌ¶óµµ ÁÙ¿©ÁÖ±â À§ÇÑ °ÍÀÏ »ÓÀÌ´Ï »ç¿ëÇÏÁö ¾Ê´Â °ÍÀÌ °¡Àå ÁÁ´Ù.

  new¿Í malloc

¸Þ¸ð¸® ÇÒ´çÀ» ÇÒ ¶§ ¿ì¸®°¡ »ç¿ëÇÏ´Â new¸¦ Çѹø »ìÆìº¸ÀÚ. C++ ÇÁ·Î±×·¡¸ÓÀÎ ¿©·¯ºÐ¿¡°Ô Á÷Àå »ó»ç°¡ µÇ¾ú°Ç Çб³ ±³¼ö´ÔÀÌ µÇ¾ú°Ç ¸Þ¸ð¸® ÇÒ´çÀ» ¹ÞÀ» ¶§ ƯÁ¤ ¸Þ¸ð¸® ¹øÁö·ÎºÎÅÍ, ¶Ç´Â ƯÁ¤ ¸Þ¸ð¸® ¹øÁö·ÎºÎÅÍ ÇÒ´ç ¹Þ¾Æ ÀÖ´Â buffer¸¦ »ç¿ëÇÏ¿© ÇÁ·Î±×·¥À» Ç϶ó°í ÇÏ¸é ¿©·¯ºÐÀº ¾î¶»°Ô Çϰڴ°¡?

ÀÌ·¯ÇÑ ÀÛ¾÷Àº ¸Þ¸ð¸® ¸Ê IO¸¦ ¾²´Â °æ¿ì¿¡ À¯È¿ÇÑ ±â¹ýÀÎ ´ö¿¡ À¯¿ëÇÏ°Ô »ç¿ëµÉ ¼ö ÀÖ´Ù. °¡Àå °£´ÜÇÑ ¹æ¹ýÀº C¸¦ °¨½Î´Â Wrapper class¸¦ Çϳª ¸¸µå´Â °ÍÀÌ´Ù. Áï Buffer¸¦ ¹Þ¾Æ¼­ °ü·ÃµÈ ÀÚ·á ±¸Á¶ÇüÀ¸·Î ¹ÙÀεù ½ÃŲ µÚ ¹ÝȯÇÏ´Â °ÍÀÌ´Ù.

´ëÃæ ÀÌ·± ½ÄÀÌ µÉ °ÍÀÌ´Ù. ±×·¯¸é ¸ÞŸÁ¤º¸°¡ ÀÖ´Â 2¹ÙÀÌÆ®¿Í µ¥ÀÌÅÍ ¿µ¿ªÀÇ 8¹ÙÀÌÆ®·Î ¹ÙÀεù µÈ´Ù. ÀÌ·¯ÇÑ Å¬·¡½ºÀÇ ¹®Á¦´Â ¹«¾ùÀΰ¡? ¾î¶² Ư¡À» °¡Áø Ŭ·¡½ºÀÇ ³»¿ëÀÌ ¾Æ´Ï¶ó ´ÜÁö ¸Þ¸ð¸® ¿ÀÇÁ¼Â¸¸Å­À» ÆÄ½ÌÇϱâ À§ÇØ ¼±¾ðµÈ Á¤Ã¼ ¸ð¸¦ °´Ã¼ÀÌ´Ù.

ÀÌ·± °æ¿ì ¿ì¸®°¡ Àß¶ó¾ß ÇÏ´Â ³»¿ëÀÌ ´õ Ãß°¡ µÈ´Ù¸é ¿ì¸®´Â ÀÌ·¯ÇÑ Å¬·¡½º¿¡ Á¤Ã¼ ¸ð¸¦ Ư¡°ú ¸Þ¼Òµå¸¦ Ãß°¡ ÇÏ°Ô µÈ´Ù. ±×¸®°í »ç½Ç ¿ì¸®°¡ ÇϰíÀÚ ÇÏ´Â °ÍÀº ´ÜÁö ÆÄ½ÌÀÌ ¾Æ´Ï¶ó ƯÁ¤ °³Ã¼°¡ »ý¼ºµÉ ¶§ ±× °³Ã¼ÀÇ ¸Þ¸ð¸® À§Ä¡¸¦ ¹Ì¸® ¼±¾ðµÈ °÷À¸·Î ¹ÙÀεù ÇÏ·Á°í ÇÏ´Â °ÍÀÌ´Ù.

¿ì¸®´Â ¿©±â¼­ operator new¿Í new ±×¸®°í replacement new¸¦ »ý°¢Çغ¼ ¼ö ÀÖ´Ù.

C++¿¡¼­ Áö¿øµÇ´Â new¿¡ ´ëÇØ¼­´Â ¿ì¸®ÀÇ ¹öÀüÀ¸·Î º¯°æÇÒ ¼ö ¾ø´Ù. NewÀÇ µ¿ÀÛÀº Å©°Ô malloc°ú °°ÀÌ Ã»Å© ´ÜÀ§ÀÇ ÃʱâÈ­ µÇÁö ¾ÊÀº ¸Þ¸ð¸® ´ÜÀ§¸¦ ÇÒ´ç ¹Þ°í ±× ¸Þ¸ð¸®¿¡ Á¤ÀÇµÈ Å¬·¡½ºÀÇ µ¥ÀÌÅÍ Å¸ÀÔ¿¡ ¸Â°Ô ¹ÙÀεùÇÑ µÚ ÃʱâÈ­ °úÁ¤À» °ÅÃļ­ ¿ì¸®¿¡°Ô Àü´ÞµÈ´Ù.

±×·¯¸é ¿ì¸®´Â ƯÁ¤ ¸Þ¸ð¸® ¹øÁö¿¡ ÇÒ´çµÈ ¹öÆÛ¸¦ »ç¿ëÇÏ¿© ¿ì¸®¸¸ÀÇ new ¿¬»êÀÚ¸¦ ¸¸µé±â À§ÇÏ¿© ÇÒ ¼ö ÀÖ´Â °ÍÀº Ű¿öµå new°¡ ¾Æ´Ï¶ó operator new¿¡ ´ëÇÑ ¿À¹ö·Îµù(overloading)ÀÌ´Ù.

operator newÀÇ °æ¿ì malloc°ú °°ÀÌ void * ŸÀÔÀÇ ¸Þ¸ð¸® ûũ¸¦ ´øÁ® Áֱ⠶§¹®¿¡ ¿ì¸®°¡ ¿øÇÏ´Â ¹öÆÛ ¿µ¿ªÀ¸·Î ±³È¯ÇÏ¸é µÈ´Ù. Operator new À̿ܿ¡µµ replacement new°¡ Àִµ¥, »ç½Ç ÀÌ replacement new´Â operator newÀÇ ¿øÇü¿¡ ´ÜÁö ¾Æ±Ô¸ÕÆ® Çϳª¸¸ Ãß°¡ÇÏ¿© ¶È °°Àº ¹æ½ÄÀ¸·Î ¿À¹ö·ÎµùÇÑ ¿¬»êÀÚÀÌ´Ù.

»óÀ§ Äڵ忡¼­ ±¸ÇöÇß´ø ÆÄ½Ì ¹®Á¦¸¦ °¢ Ŭ·¡½ºÀÇ replacement new »ý¼ºÀÚ¿¡ Àû¿ëÇÏ°í Æ¯Á¤ ¸Þ¸ð¸® ¹øÁöÀÇ buffer¸¦ ¹ÞÀº ±× Ŭ·¡½º¸¦ ¹ÙÀεù ½ÃŰ´Â ±¸Á¶·Î ÀÌ·ç¾îÁö¸é µÉ °ÍÀÌ´Ù.

 <¸®½ºÆ® 10> ¸Þ¸ð¸® ¸ÊÀ» À§ÇÑ À¯Æ¿¸®Æ¼ Ŭ·¡½º


 <¸®½ºÆ® 11> Replacement new¿¡ ÀÇÇØ ¸Å¸ð¸® ¸Ê ±â´ÉÀÌ ¿À¹ö·Îµù µÈ Class


ÇÑ ¿¬»êÀÚÀÌ´Ù. »óÀ§ Äڵ忡¼­ ±¸ÇöÇß´ø ÆÄ½Ì ¹®Á¦¸¦ °¢ Ŭ·¡½ºÀÇ replacement new »ý¼ºÀÚ¿¡ Àû¿ëÇÏ°í Æ¯Á¤ ¸Þ¸ð¸® ¹øÁöÀÇ buffer¸¦ ¹ÞÀº ±× Ŭ·¡½º¸¦ ¹ÙÀεù ½ÃŰ´Â ±¸Á¶·Î ÀÌ·ç¾îÁö¸é µÉ°ÍÀÌ´Ù.

  ´À¸²º¸ Æò°¡(Lazy evaluation)

À̹ø¿¡´Â ´À¸²º¸ Æò°¡(Lazy evaluation)À̶ó´Â ±â¹ý¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ. ´À¸²º¸ Æò°¡ ¸ÞÄ¿´ÏÁòÀº APLÀ̳ª LISP, Haskell°ú°°Àº ¾ð¾î¿¡ »ç¿ëµÈ´Ù. ÀÌ ¸ÞÄ¿´ÏÁòÀÌ Àû¿ëµÈ ¾ð¾î´Â ½ÇÁ¦ »ç¿ëµÉ ¶§±îÁö Æò°¡(evaluation)¸¦ ÇÏÁö ¾Ê´Â´Ù.

ÇϳªÀÇ ¿¹¸¦ »ìÆìº¸ÀÚ. <¸®½ºÆ® 12>´Â C++°ú HaskellÀÇ µÎ °¡Áö ¾ð¾î·Î ÀÛ¼ºµÈ ¸®½ºÆ®ÀÌ´Ù. Âü°í·Î C++Àº Áï½Ã Æò°¡¸¦ Çϰí HaskellÀº ´À¸²º¸Æò°¡(Lazy evaluation)¸¦ ÇÑ´Ù.

 <¸®½ºÆ® 12> Lazy evaluationÀÌ µÈ´Ù°í °¡Á¤ÇÑ C++ÀÇ ¸®½ºÆ® ÄÚµå


C·Î ÀÛ¼ºµÈ <¸®½ºÆ® 12>ÀÇ Àǵµ´Â ´ÙÀ½°ú °°´Ù. ¸®½ºÆ®ÀÇ Çì´õ¸¦ Çϳª ¸¸µé°í Çì´õ·ÎºÎÅÍ MakeList()¸¦ Àç±ÍÀûÀ¸·Î È£ÃâÇÏ¿© ¸®½ºÆ®¸¦ ºôµåÇÏ´Â °ÍÀÌ´Ù. C³ª C++, ÀÚ¹Ù¿Í °°Àº ¾ð¾î¿¡ Àͼ÷ÇÑ ÇÁ·Î±×·¡¸Ó´Â ÀÌ Äڵ带 º¸°í ¹Ù·Î ¸»µµ ¾È µÇ´Â ¼Ò¸®¸¦ ÇÒ ¼ö ÀÖ´Ù.

ÀÌ ¸®½ºÆ®¿¡´Â Base conditionÀÌ Á¸Àç ÇÏÁö ¾Ê´Â Å¿ÀÌ´Ù. ÀÌ ¸®½ºÆ®´Â È£Ã⠵Ǵ Áï½Ã °è¼Ó ÀÚ½ÅÀ» ÇÒ´ç ÇÏ´Ù°¡ °á±¹ ¿À¹öÇ÷οì·Î Áװųª ¼Ë´Ù¿î ¹öưÀÌ ´­·ÁÁú ÀλýÀÌ´Ù. ÇÏÁö¸¸ HaskellÀÇ °æ¿ì¸¦ º¸ÀÚ.

makeList = 1 : makeList

ÀÌ HaskellÀÇ ÄÚµå´Â C++¿¡¼­ ÀÛ¼ºÇÑ ¸®½ºÆ®¿Í °°ÀÌ 1·Î ½ÃÀÛÇÏ´Â ³ëµå¸¦ °¡Áö°í ¸®½ºÆ®¸¦ ¹«ÇÑ È®ÀåÇÏ¿© ºôµå ÇÏ´Â °ÍÀε¥µµ Á¤»óÀûÀ¸·Î µ¿ÀÛÇÑ´Ù. ÀÌÀ¯´Â ¹«¾ùÀϱî? ±×°ÍÀº °ÔÀ¸¸¥ Æò°¡¸¦ Çϱ⠶§¹®ÀÌ´Ù.

Áï ¸®½ºÆ®¸¦ ¼±¾ðÇØµÎ°í µ¿ÀÛ ÇÒ ¶§¸¸ ±× ¸¸Å­ÀÇ ¸®½ºÆ®¸¦ »ý¼ºÇÑ´Ù. C++Àº Ű¿öµå ¿¬»êÀÚ¿¡ ´ëÇÏ¿© ºÎºÐÀûÀ¸·Î °ÔÀ¸¸¥ Æò°¡¸¦ ÇÏÁö¸¸ Haskell°ú´Â ±Ùº»ÀûÀÎ ¸ÞÄ¿´ÏÁòÀÌ ´Ù¸£´Ù.

¶Ç ´Ù¸¥ ¿¹¸¦ ÇÑ ¹ø »ìÆìº¸ÀÚ. ¾à°£ ¾ïÁö½º·´Áö¸¸ ¸¸¾à C++¿¡¼­ if¶ó´Â Ű¿öµå°¡ ¾ø´Ù°í °¡Á¤ ÇØº¸ÀÚ. ¿ì¸®´Â if¶ó´Â Ű¿öµå°¡ ¾øÀ¸¹Ç·Î if¶ó´Â »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© µ¿ÀÛ½ÃÄÑ¾ß ÇÑ´Ù.

myif(cond, trueValue, falseValue)¶ó´Â »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö¸¦ Á¦ÀÛÇÏ¿´´Ù°í °¡Á¤ ÇØº¸ÀÚ. ù ¹øÂ° ÆÄ¶ó¹ÌÅÍ´Â Á¶°Ç¹®À̸ç, µÎ¹øÂ° ÆÄ¶ó¹ÌÅÍ´Â Á¶°ÇÀÌ trueÀÏ ¶§ ¸®ÅÏ µÇ´Â °ª ±×¸®°í ¼¼ ¹øÂ°´Â falseÀÏ ¶§ ¸®ÅÏ µÇ´Â °ªÀÌ´Ù.

ÀÌ myif()·Î ¿ì¸®´Â ifÀÇ ´ëºÎºÐÀ» ó¸® ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°Àº Àç±Í ÇÔ¼ö¸¦ ¸¸µé¾ú´Ù°í °¡Á¤Çغ¸ÀÚ.

fact( x ){
myif(x<=1, 1, x*fact(x-1));
}

ÄÚµå »ó¿¡¼­ fact(3); À» ½ÇÇàÇÏ¸é ¾î¶»°Ô µÉÁö Á÷Á¢ »ý°¢ÇØ º¸ÀÚ. ÀÌ ÄÚµå´Â ¼º°øÀûÀ¸·Î µ¿ÀÛÇÏÁö ¸øÇÏ°í ¹«ÇÑ ·çÇÁ¿¡ ºüÁö°Ô µÈ´Ù.

=> myif(3<=1, 1, 3*fact(3-1));
=> myif(3<=1, 1, 3*myif(2<=1,1,2*fact(2-1)));
=> myif(3<=1, 1, 3*myif(2<=1,1,2*myif(1<=1,1,1*fact(1-1));
=> myif(3<=1, 1, 3*myif(2<=1,1,2*myif(1<=1,1,1*myif(...);

À̰ÍÀº C++¿¡¼­ ÇÔ¼öÀÇ °æ¿ì returnµÇ´Â Base condition±îÁö ÇÔ¼ö¸¦ ÆîÄ¡±â ¶§¹®¿¡ ÆÄ¶ó¹ÌÅÍ »ó¿¡¼­ °è¼Ó Àç±ÍµÇ´Â ¿ì¸®ÀÇ fact ÇÔ¼ö´Â °á±¹ ¿À¹öÇÃ·Î¿ì µÉ °ÍÀÌ´Ù.

ÀÚ ±×·¯¸é ¿ì¸®´Â °ÔÀ¸¸¥ Æò°¡±â¹ýÀ» ¾î¶»°Ô »ç¿ëÇÏ¸é µÉ±î? C++ÀÌ °ÔÀ¸¸¥ Æò°¡ ¸ÞÄ¿´ÏÁòÀ» Áö¿øÇÏÁö´Â ¾ÊÁö¸¸ ¿ì¸®°¡ ±¸ÇöÇØ¼­ ¾²Áö ¸øÇÒ ¸¸Å­ °©°©ÇÑ ¾ð¾î´Â ¾Æ´Ï´Ù.

¸¹ÀÌ »ç¿ë µÇ°í ÀÖ´Â ¿¹·Î Çà·Ä ¿¬»êÀ» »ìÆìº¸ÀÚ. Çà·Ä ¿¬»êÀÇ °æ¿ì »ç¿ëÀÚ°¡ ¿øÇϴ ƯÁ¤ ¿ø¼Ò´Â Àüü Å« Çà¿­ Áß¿¡¼­ ±ØÈ÷ ÀϺο¡ Áö³ªÁö ¾ÊÀ» °ÍÀÌ´Ù. ¿ì¼± °è¼Ó °è»êÀ» ¹Ì·ç°í ÀÖ´Ù°¡ ¸¶Áö¸·¿¡ ÇÊ¿äÇÑ ºÎºÐ¸¸ °è»êÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù.

¶Ç, Å« Ŭ·¡½ºµéÀÌ ¹èÁ¤(assign)µÇ´Â °æ¿ì ½ÇÁ¦ ¿¬»êÀÌ ÀÌ·ç¾îÁö´Â ½ÃÁ¡±îÁö ¸Þ¸ð¸®¸¦ ÇÒ´ç ÇÏÁö ¾Ê°í ´ÜÁö ÀÚ½ÅÀÌ ¹èÁ¤ µÇ¾ú´Ù´Â »ç½Ç¸¸ ³²°ÜµÎ°í ¾²±â Á¤Ã¥ÀÌ ¿À¸é ±×¶§ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ¿© ¹èÁ¤ÇÏ´Â ¹æ½Äµµ ÀÖ´Ù. ´Ù¸¸ ¿ì¸®°¡ Àß ±¸ºÐÇØ¾ß ÇÒ °ÍÀº ÀÌ °´Ã¼°¡ ÀоîÁö´Â »óȲÀΰ¡ ¾Æ´Ï¸é ½áÁö´Â »óȲÀΰ¡ ÇÏ´Â °ÍÀÌ´Ù.

À̿ʹ ¹Ý´ë µÇ´Â °³³äÀ¸·Î ³Ê¹« ¿­ÁßÇÏ´Â Æò°¡(Over eagerevaluation) ±â¹ýÀ» »ý°¢Çغ¼ ¼ö ÀÖ´Ù. ÀÌ´Â »ç½Ç OS³ª ¸¹Àº ¿©Å¸ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ »ç¿ëµÇ´Â ±â¹ýÀ¸·Î ij½Ì(Cashing)°úPrefetching µî¿¡ »ç¿ë µÉ ¼ö ÀÖ´Ù.

¸Þ¸ð¸®ÀÇ ÇÒ´çÀÌ ºó¹øÇÒ °æ¿ì ¿À¹öÇìµå¸¦ ÁÙÀ̱â À§Çؼ­ Å« ¸Þ¸ð¸® ûũ¸¦ ¹Ì¸® ¹Þ¾Æ ³õ°í ÇÒ´çµÈ memory pool¿¡¼­ Á¶±Ý ¾¿ ¶§¾î ÁÖ´Â ±â¹ýÀ¸·Î ¼Óµµ¸¦ °³¼± ÇÒ ¼ö ÀÖ´Ù.

´Ù¸¥ °æ¿ì¿¡¼­´Â ÀÚ½ÅÀÇ Å¬·¡½º Áß Bitmap°ú »ç¿ëµÇ´Â ÀϺκÐÀ» ¹Ì¸® ¸Þ¸ð¸®¿¡ ¿Ã·Á³õ°í Bitmap¿¡¼­ È÷Æ®°¡ ÀÖÀ» °æ¿ì ¸Þ¸ð¸®¿¡¼­ ÀÐ¾î ¿À°Ô ÇÔÀ¸·Î½á ¼Óµµ¸¦ °³¼±ÇÏ°Ô ÇÏ´Â ±â¹ýÀÌ´Ù. ÀÌ·¯ÇÑ ±â¹ýÀº ±âÁ¸ ÆÄÀÏ ½Ã½ºÅÛ °ü·Ã ³í¹®¿¡¼­µµ ½±°Ô ¹ß°ß ÇÒ ¼ö ÀÖÀ¸´Ï Çѹø À¥¿¡¼­ ã¾Æº¸µµ·Ï ÇÏÀÚ.

  ¹Ýȯ °ª ÃÖÀûÈ­(Return value Optimization)

¿ì¸®´Â °¡²û °ªÀ» ¸®ÅÏ ÇÏ´Â ÇÔ¼ö¸¦ Á¦ÀÛÇØ¾ß ÇÒ °æ¿ì°¡ ÀÖ´Ù. ´ëºÎºÐ ÀÌ·± °æ¿ì¿¡ Á÷°üÀûÀÌÁö ¸øÇÑ Æ÷ÀÎÅÍ ÆÄ¶ó¹ÌÅͳª ·¹ÆÛ·±½º ÆÄ¶ó¹ÌÅ͸¦ »ç¿ëÇÏ¿© ±âº» °ªÀ» ¸®ÅÏ ÇÏ°Ô ¸¶·ÃÀÌ´Ù.

4¹ÙÀÌÆ® Á¤µµÀÇ ±âº» ŸÀÔµéÀ» ó¸®ÇÏ´Â °æ¿ì¿¡´Â ¿À¹öÇìµå°¡ ÀûÁö¸¸ ±× ŸÀÔÀÌ »ç¿ëÀÚ Á¤ÀÇÀΠŬ·¡½º¶ó¸é °¡Áö°í ÀÖ´Â ¸â¹ö¿Í ¸Þ¼Òµåµé¿¡ µû¶ó¼­ ¹«½Ã ÇÒ ¼ö ¾ø´Â ¿À¹öÇìµå°¡ µé¾î°£´Ù. ÁÂÇ¥ °ªÀ» °è»êÇÏ´Â CPoint¶ó´Â Ŭ·¡½º¸¦ Á¦ÀÛ ÇÏ¿´´Ù°í °¡Á¤Çϰí Àӽà ¿ÀºêÁ§Æ®ÀÇ »ý¼º °úÁ¤°ú ¹®Á¦¸¦ »ìÆìº¸ÀÚ.

Àӽà ¿ÀºêÁ§Æ®(Temp object)
Á÷°üÀûÀ¸·Î Àӽà ¿ÀºêÁ§Æ®¸¦ ¹ÝÈ¯ÇØ¾ß Çϴ Ŭ·¡½º¸¦ »ý°¢Çغ¸ÀÚ. ´ëÃæ <¸®½ºÆ® 13>°ú °°Àº Äڵ带 °¡Áú °ÍÀÌ´Ù.

 <¸®½ºÆ® 13> ¹Ýȯ °ª ÃÖÀûÈ­°¡ ÇÊ¿äÇÑClass


+ ¿¬»êÀ» Çϱâ À§Çؼ­ ¿ì¸®´Â ¿ÀÆÛ·¹ÀÌÅ͸¦ ¿À¹ö·Îµù ÇÑ´Ù. <¸®½ºÆ® 13>¿¡¼­´Â 8¹ÙÀÌÆ®ÀÎ ¸â¹öµéÀÌ Á¸Àç Çϰí ÀÌ·¯ÇÑ °´Ã¼¸¦ ¹Ýȯ ÇÏ´Â Äڵ带 ÀÛ¼ºÇØ¾ß ÇÑ´Ù.

 <¸®½ºÆ® 14> <¸®½ºÆ®13>¿¡ ´ëÇÑ ±¸ÇöºÎ


<¸®½ºÆ® 14>¿Í °°Àº °æ¿ì Àӽà °´Ã¼´Â ´õÇϱ⠿¬»êÀ» À§ÇØ ·ÎÄà ½ºÅÿ¡ ÇÑ °³¸¦ ¹ÝȯÇϸ鼭 ÇÑ °³°¡ »ý¼ºµÈ´Ù. º¹»ç´Â returnµÇ¸é¼­ Àӽà ¿ÀºêÁ§Æ®·Î Çѹø ±× Àӽà ¿ÀºêÁ§Æ®¸¦ a¿¡ º¹»çÇϱâ À§ÇØ ÇÑ ¹ø ´õ ¸Þ¸ð¸® Ä«Çǰ¡ ÀϾ´Ù. ÀÌ·± °ÍÀ» ¸·±â À§ÇØ °¡²û ¿ì¸®´Â ´ÙÀ½°ú °°ÀÌ Æ÷ÀÎÅ͸¦ ¹ÝȯÇÏ¿© Àӽà °´Ã¼ÀÇ »ý¼ºÀ» ¸·´Â´Ù.

const CPoint * operator + (const CPoint &lhs, const CPoint&rhs)

¹°·Ð ³»ºÎ¿¡¼­´Â ¸Þ¸ð¸®ÀÇ µ¿Àû ÇÒ´çÀ» ¹Þ¾ÒÀ» °ÍÀÌ´Ù. ÀÌ·± °æ¿ì »ç¿ëÀ» À§Çؼ­´Â CPoint = *( a + b); ½ÄÀÌ µÉ °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ¹®ÀåÀº Á÷°üÀûÀÌÁö ¾ÊÀ» »Ó´õ·¯ ¿ÀÆÛ·¹ÀÌÅÍ ¿À¹ö·ÎµùÀÇ ÀÌ Á¡À» ÀüÇô °¡Á® ¿Ã ¼ö ¾ø´Ù.

¶ÇÇÑ ³»ºÎ¿¡¼­ µ¿Àû ÇÒ´çÀ» ¹Þ¾Æ »ý¼ºµÈ ¸Þ¸ð¸®ÀÇ ÇØÁ¦´Â ¾îµð¼­ ´ã´çÇÒ °ÍÀΰ¡? ÀÌ·¯ÇÑ À߸øµÈ ÄÚµå´Â ·¹ÆÛ·±½º·Î ¹ÝȯÇÏ´Â °æ¿ì¿¡µµ ¸¶Âù°¡Áö´Ù. ¾ðÁ¦ µ­±Û¸µ Æ÷ÀÎÅͰ¡ µÉÁö ¸ð¸£´Â ¹®Á¦À̱⠶§¹®ÀÌ´Ù.

¹®Á¦ÀÇ Á¤´äºÎÅÍ ¸»ÇÑ´Ù¸é, ¸¶Ä¡ º¯¼ö¿¡ ´ëÇÏ¿© DMA¿Í °°Àº µ¿ÀÛÀ» ÇÏ´Â °Íó·³ º¸ÀÌ°Ô ÇÏ´Â ÄÄÆÄÀÏ·¯ ÃÖÀûÈ­ ¿É¼ÇÀÌ Àִµ¥ À̰ÍÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù.

RVO ¹Ýȯ °ª ÃÖÀûÈ­
Àӽà °´Ã¼ º¯¼ö·ÎºÎÅÍ ¿ì¸®°¡ »ý¼ºÇÑ º¯¼öÀÇ °ªÀ» À̵¿ÇØÁÖ´Â ÀÌ ¼ÒÇÁÆ®¿þ¾î DMA°°Àº ±â¼úÀº º° °Í ¾Æ´Ï´Ù. ´ÜÁö C++ÀÇ ÄÄÆÄÀÏ·¯°¡ ÃÖÀûÈ­¸¦ ÇØÁÖ´Â °ÍÀÌ´Ù. À̸¦ RVO(Return Value Optimization)¶ó°í ºÎ¸£±âµµ ÇÑ´Ù.

¿ø·¡ °ªÀ» ¹ÝȯÇÏ´Â ¸Þ¼Òµå´Â Àӽà °´Ã¼ÀÇ »ý¼ºÀ» ¸·À» ¾ð¾îÀûÀÎ ¹æ¹ýÀº ¾ø´Ù.

ÇÏÁö¸¸ ƯÁ¤ ÆÐÅÏ(³»ºÎ °ªÀ» ¹ÝȯÇÏ¿© ¹èÁ¤ÇØ¾ß ÇÏ´Â °æ¿ì)¿¡¼­ Àӽà °´Ã¼ º¯¼ö°¡ ÇÊ¿ä ¾ø´Â °ÍÀº »ç¶÷ÀÇ ´«À¸·Îµµ ¾ÆÁÖ ½±°Ô ½Äº°ÇÒ¸¸ÇÑ ³»¿ëÀÎ ¸¸Å­ °¢ ÄÄÆÄÀÏ·¯¸¶´Ù ÀÌ·¯ÇÑ ÃÖÀûÈ­¸¦ ÁøÇàÇØÁØ´Ù. ÄÄÆÄÀÏ·¯´Â ÀÌ·¯ÇÑ °æ¿ì¿¡ Àӽà °´Ã¼ ¸ðµÎ¸¦ ¾ø¾Ö°í ¸Þ¼Òµå °á°ú °ªÀ» ÇÒ´çµÈ ¸Þ¸ð¸®¿¡ Á÷Á¢ ³Ö¾î ÃʱâÈ­ ÇØÁØ´Ù.

´Ü, ¿ì¸®°¡ ÀÌ·¯ÇÑ RVO¸¦ Á¦´ë·Î »ç¿ëÇÏ·Á¸é ¾î¶°ÇÑ ¹æ½ÄÀ¸·Î ¹®¹ýÀ» »ç¿ë ÇßÀ» ¶§ ÄÄÆÄÀÏ·¯°¡ ÃÖÀûÈ­¸¦ ó¸® ÇØÁÖ´Â °¡ÀÌ´Ù.

Const CPoint operator + ( const CPoint &lhs, const CPoint &rhs)
{
return CPoint(lhs.GetX() + rhs.GetX(), lsh.GetY() +rhs.GetY());
}

ÀÌ ÄÚµå´Â ³»ºÎ¿¡¼­ »ý¼ºÀÚ¸¦ ÅëÇØ return ÇÏ´Â °æ¿ìÀÌ´Ù. ÀÌ·² ¶§¿¡´Â »ç¿ëÀÚ°¡ Á¤ÀÇÇÑ ¸Þ¸ð¸®¿¡ Á÷Á¢ °ªÀ» ³Ö¾î¼­ ÃʱâÈ­Çϱ⠶§¹®¿¡ ¸¹Àº ÇÁ·Î±×·¡¸Ó°¡ ÇÏ´Â °í¹ÎÀ» ÇØ°áÇÒ ¼ö ÀÖ´Ù.

»ç½Ç ÀÌ·¯ÇÑ ±â¹ýÀº C++ ÀÚü¿Í´Â °ü°è°¡ ¾øÁö¸¸ ÄÄÆÄÀÏ·¯´Â »ý°¢º¸´Ù ¿ì¸®°¡ ¸ð¸£´Â °÷¿¡¼­ ¸¹Àº ÃÖÀûÈ­¸¦ ÇÏ°Ô µÈ´Ù. ¾î¶² Äڵ忡¼­´Â ÇÁ·Î±×·¡¸Ó°¡ ÀǵµÇÏÁö ¾ÊÀº ÃÖÀûÈ­¸¦ ÇÏ°Ô µÇ°í, ¾î¶² °÷¿¡¼­´Â ÇÁ·Î±×·¡¸Ó°¡ ÃÖÀûÈ­ ÇØÁÖ´Â ÄÚµå ÆÐÅÏÀ» ¸ô¶ó¼­ ÃÖÀûÈ­¸¦ ³õÄ¡°Ô µÇ±âµµ ÇÑ´Ù.

±×·± Àǹ̿¡¼­ ÃÖÀûÈ­ ¹®Á¦¿¡ ¹Î°¨ÇÑ ÇÁ·Î±×·¡¸Ó¶ó¸é ÀÌ·¯ÇÑ ÄÄÆÄÀÏ·¯ µ¿ÀÛ ¹æ½ÄÀ» ÀÌÇØÇÏ´Â °ÍÀÌ Å« µµ¿òÀÌ µÈ´Ù.

  ´Ù¸¥ ¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾î¸µ ¹æ¹ý·Ð°úÀÇ ºñ±³

´Ù¸¥ SE°³¹ß ¹æ¹ý·Ð°ú °´Ã¼ ÁöÇâÀû C++¸¦ ºñ±³ÇÏ¿© Âù¹ÝÀ» °¡¸®ÀÚ´Â °ÍÀº ¾Æ´Ï´Ù. ´Ù¸¸, ¸¶¹«¸® ±ÛÀ» ¾²±â¿¡ ¾Õ¼­ ÇÊÀÚ°¡ µ¶ÀÚ¿¡°Ô ´çºÎÇÏ°í ½ÍÀº À̾߱⸦ Àá½Ã ÇϰíÀÚ ÇÑ´Ù.

CBSE(Component Base Software Engineering)¿¡¼­´Â OOP¸¦ ³Ê¹« ÀÛÀº ´ÜÀ§ÀÇ ±¸Ã¼È­¸¦ ÅëÇØ º¹Àâµµ°¡ ¿Ã¶ó°¡°í Àç»ç¿ë¼ºÀÌ ÇöÀúÈ÷ ¶³¾îÁ® ½ÇÆÐÇÑ °ÍÀ̶ó°í À̾߱â ÇÑ´Ù. ÇÏÁö¸¸ CBSE ¶ÇÇÑ Æ¯Á¤ÇÑ ±ÔÄ¢À̳ª ÀýÂ÷ ¾øÀÌ ´ÜÁö Å« Á¶°¢È­¸¦ ÇÏ´Â °ÍÀ¸·Î ÀÀ¿ëµÇ°í ÀÖ´Â ½ÃÁ¡¿¡¼­ ±× ÄÄÆ÷³ÍÆ® °£ÀÇ º¹Àâµµ´Â Àç»ç¿ë¼ºÀ» ÇöÀúÇÏ°Ô ¶³¾î¶ß¸®´Â ¿ä¼Ò¶ó°í »ý°¢ÇÑ´Ù.

¿äÁò Å« À̽´°¡ µÇ°í ÀÖ´Â Æ÷Ç×°ø´ë °­±³Ã¶ ±³¼ö´ÔÀÇ FORM(Feature Oriented Reuse Method) ¹ÙÅÁÀÇ PLSE(Product Line Software Engineering) ¹æ¹ý·Ð ¼¼¹Ì³ª¿Í ´ëÈ­ ¼Ó¿¡¼­ Àç¹ÌÀÖ´Â »ç½ÇÀ» ¹ß°ß ÇÒ ¼ö ÀÖ´Ù.

±×°ÍÀº »ç¹°ÀÇ Æ¯Â¡ Áß À¯»ç¼º°ú ÀÌÁú¼º¿¡ ´ëÇÑ ±¸ºÐÀÌ´Ù. PLSEÀÇ ¸ðµ¨¸µ ±â¹ý¿¡¼­ ÀÌ·¯ÇÑ À¯»ç¼º°ú ÀÌÁú¼º¿¡ ´ëÇÑ ±¸ºÐÀ¸·ÎºÎÅÍ Á¦ÀÛÇÏ°Ô µÇ´Â ÄÄÆ÷³ÍÆ®µéÀº OOP¿¡¼­ ÁÁÀº ¹æÇâÀ¸·Î ÀÀ¿ëµÉ ¼ö ÀÖ´Ù.

C++À» Có·³ »ç¿ëÇÏ´Â °ÍÀ» ¸·°í ÀÖÁö ¾ÊµíÀÌ OOP¸¦ ÀýÂ÷Àû ¾ð¾îó·³ »ç¿ëÇÏ´Â °Í ¶ÇÇÑ ¾î´À ´©±¸µµ ¸·Áö ¾ÊÀ»»Ó´õ·¯ ¸·À» ¼ö ÀÖ´Â ±ÔÄ¢ ¶ÇÇÑ ¾ø´Ù.

¿ì¸®´Â °³¹ß¿¡ ¾Õ¼­ PLSE¿Í À¯»çÇÏ°Ô °¢ ¿ÀºêÁ§Æ® °£ÀÇ Æ¯Â¡À» ºÐ·ùÇϰí ÀÌ·¯ÇÑ Æ¯Â¡µé »çÀÌ¿¡¼­ À¯»çÇÑ ±×·ì°ú ÀÌÁú¼ºÀ» °¡Áø ±×·ìÀ» ³ª´©°í ÀÎÅÍÆäÀ̽º¿Í »ó¼Ó °ü°è¸¦ Á» ´õ ±¸Ã¼È­ ÇÏ¿©ÀÚÄ© OOP ÇÁ·Î±×·¡¹ÖÀÌ ÀýÂ÷Àû ÇÁ·Î±×·¡¹ÖÀ¸·Î Èê·¯°¡´Â °ÍÀ» ÀÇ½Ä ÇÏ¿© ¸·À» ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÇÊÀÚ°¡ ´çºÎ ÇÏ°í ½ÍÀº ³»¿ëÀº ´Ü ÇѰ¡ÁöÀÌ´Ù.

Ŭ·¡½º¸¦ ´ÜÁö Ãß»óÈ­ °³³äÀ¸·Î¸¸ »ç¿ëÇÑ´Ù¸é, Ä¿´Ù¶õ ³×¸ðÇü ¹Ú½º¸¦ ´ÜÁö Àß°Ô Âɰ³´Â ÀýÂ÷Àû ÇÁ·Î±×·¡¹Ö ±â¹ý ¹Û¿¡ µÉ ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù. ÀÌ ±Û¿¡¼­µµ ¸î ¹øÀ̳ª À̾߱â ÇßÁö¸¸, ±×³É ´Þ·Áµé¾î ÄÚµùÇϱâ Àü¿¡ °°Àº Ư¡À» Àß ¹­¾î¼­ ÀÎÅÍÆäÀ̽º¸¦ Çü¼ºÇϰí È®À强À» °í·ÁÇÏ¿© Á¶±ÝÀÌ¶óµµ µðÀÚÀÎÀ» ÇØºÁ¾ß ÇÑ´Ù´Â Á¡ÀÌ´Ù.

Áö±Ý±îÁö ¿ì¸®´Â C++¿¡ ´ëÇÑ ¿ø·ÐÀûÀÎ À̾߱âºÎÅÍ ÃÖÀûÈ­ ¹®Á¦±îÁö »ìÆìº¸¾Ò´Ù. »ç½Ç ºÐ·®ÀÌ Á¤ÇØÁø ÀÌ ±Û¿¡¼­´Â ÇÊÀÚ°¡ÇÏ°í ½ÍÀº À̾߱⳪ ÇÊÀÚ¿¡°Ô ¿µÇâÀ» ¹ÌÄ£ OOP °í¼öµéÀÌ °­Á¶ÇÏ´Â À̽´µé¿¡ ´ëÇØ 1/10µµ ´Ù ¸ø Àû¾ú´Ù.

ÇÊÀÚ´Â C++¿¡ ´ëÇØ »ó´çÈ÷ ¾Æ³¢´Â ÆíÀÌ´Ù. Áö±Ý Çö¾÷¿¡¼­´Â µµÀúÈ÷ Àû¿ë ÇÒ ¼ö ¾ø´Â ¹®¹ý°ú ÆÐ·¯´ÙÀÓÀÓ¿¡µµ ºÒ±¸Çϰí ÀÓº£µðµå ºÐ¾ß¿¡¼­µµ Â÷Ãû °´Ã¼ ÁöÇâÀû ¼º°ÝÀÇ ÄÚµå·Î ¿Å°Ü °¡°í ÀÖ´Ù.

±× ÀÌÀ¯´Â ¼­µÎ¿¡ ¸»Çß´ø °´Ã¼ ÁöÇâÀû ¹®Á¦ ÇØ°á¹ý°ú ±Í°á µÈ´Ù. TRUE¿Í FALSE, ÀÌ µÎ °¡Áö·Î Áõ¸í µÇÁö ¾Ê´Â ¼öÇÐÀû ¾ð¾î¸¦ °¡Áö°í Ç®Áö ¸øÇÏ´Â ¹®Á¦µéÀÌ ±×¸¸Å­ ÀÓº£µðµå ÂÊ¿¡¼­ ¸¹¾ÆÁö´Â Å¿ÀÌ´Ù. ¶Ç, ÀÓº£µðµå ¼ÒÇÁÆ®¿þ¾î¸¦ ÅëÇØ »îÀ» À̾´Â ÇÁ·Î±×·¡¸ÓµéÀÌ ¸¹Àº °Íµµ ±× ÀÌÀ¯ Áß ÇϳªÀÌ´Ù.

ÇÊÀÚ°¡ ¸¶Ä¡¸é¼­ ÇϰíÀÚ ÇÏ´Â À̾߱â´Â, C++¿¡¼­ ÃÖÀûÈ­¸¦ ÁøÇà ÇÑ´Ù´Â °ÍÀº Æ÷ÀÎÅͳª ¸Þ¸ð¸® ¹ÙÀεù¿¡ ´ëÇÑ È¿À²ÀûÀÎ ÀÌ¿ë º¸´Ù ±× ¾ð¾î°¡ °¡Áö´Â º»ÁúÀûÀÎ ÆÐ·¯´ÙÀÓÀ» Àß ÀÌ¿ëÇÏ¿©¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù. ¹°·Ð C¿¡¼­ Æ÷ÀÎÅÍ¿Í ¸Þ¸ð¸®´Â ¾ÆÁÖ Àç¹ÌÀÖ´Â À̽´¸¦ °¡Áø °ÍµéÀÌ ¸¹´Ù.

±×·± °Í µéÀº ´ÙÀ½¿¡ ÀÓº£µðµå ÂÊ C¾ð¾î »ç¿ëÀ» ¼Ò°³ÇÒ ±âȸ°¡ µÇ¸é ´Ù·ç±â·Î Çϰí, ±Ã±ÝÇÑ »çÇ×ÀÌ ÀÖÀ¸¸é ÇÊÀÚÀÇ È¨ÆäÀÌÁö³ª ¸ÞÀÏÀ» ÅëÇØ¼­µµ Áú¹®ÇÒ ¼ö ÀÖ´Ù.

ÃÖ±Ù¿¡ ÇÊÀÚ´Â °è¼Ó ¸Þ¸ð¸® °ü·Ã ¼ÒÇÁÆ®¿þ¾î¸¦ Á¦ÀÛÇϰí, À©µµ¿ì µð¹ÙÀ̽º µå¶óÀ̹ö ÂÊÀ» ¸¹ÀÌ °³¹ß Çϰí ÀÖ¾î C++ÀÇ °­Á¡ÀÌ µÇ´Â °Í µéÀ» ¸¹ÀÌ Àؾ°í ÀÖ´Â ½ÇÁ¤ÀÌÁö¸¸, µ¶ÀÚ ¿©·¯ºÐÀº °´Ã¼ ÁöÇâÀÇ ÂüµÈ ¹¦¹Ì¸¦ Á» ´õ ´À³¢±æ ¹Ù¶õ´Ù. @


Âü°íÀÚ·á
1. Addison Welsey, Scott Meyers. More Effective C++
2. ¹è¿òÅÍ, ±èűÕÀú, K±³¼öÀÇ °´Ã¼ÁöÇâ À̾߱â



* ÀÌ ±â»ç´Â ZDNet KoreaÀÇ Á¦ÈÞ¸ÅüÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù.
µ¶ÀÚÀÇ°ß ³²±â±â (·Î±×ÀÎ ÈÄ µ¶ÀÚ ÀǰßÀ» ³²±â½Ç ¼ö ÀÖ½À´Ï´Ù.)
¾ÆÀ̵ð ºñ¹Ð¹øÈ£