ÀÌÀü | ´ë¹® | ¿µ¾î
³»°¡ C++ À» ÁÖ °³¹ß ¾ð¾î·Î »ç¿ëÇÏÁö ¾Ê´Â ÀÌÀ¯
³ª´Â ¼ÒÇÁÆ®¿þ¾î °³¹ß¿¡ ÀÖ¾î¼ ´ë°³ C ¸¦ ÁÖ °³¹ß ¾ð¾î·Î »ç¿ëÇϴµ¥ ¼¼°¡Áö
ÀÌÀ¯°¡ ¿©±â ¼Ò°³ µÈ´Ù. ³ª´Â ¿©·¯ ÄÄÇ»ÅÍ ÇÁ·Î±×·¡¹Ö ¾ð¾îµéÀ» ÀÍÇô¿Ô°í,
ƯÁ¤ÇÑ ¾ð¾î°¡ ´Ù¸¥ °Íµéº¸´Ù ¿ì¿ùÇÏ´Ù´Â »ý°¢º¸´Ù´Â ±×°ÍÀÌ ¿øÇÏ´Â ¸ñÇ¥¸¦
´Þ¼ºÇÏ´Â µµ±¸¿¡ Áö³ªÁö ¾Ê´Â´Ù°í º»´Ù.
1992 ³â¿¡ Æ÷Æ®¶õ 77 À» ÇʵηÎ, C, C++ À» Â÷·Ê·Î ÀÍÇô°¬À¸¸ç ±× ÈÄ¿¡
ÆÄ½ºÄ®, º£À̽Ä, ÀÚ¹Ù, ÆÞ, ÆÄÀ̼± µî ´Ù¸¥ ¾ð¾îµéÀ» ÀÍÇô°¬´Ù. ¾î·µç
ÀÌ ±ÛÀº C ¿Í C++ ¿¡ ÃÊÁ¡À» µÎ°í Àִµ¥ µÑ Áß ¾î¶² ¾ð¾î°¡ ³»°¡ °³¹ßÇÏ·Á´Â
¼ÒÇÁÆ®¿þ¾î ¶óÀ̺귯¸®¸¦ ´õ ¸¸Á·½º·´°Ô ±¸ÇöÇÒ ¼ö ÀÖ´ÂÁö °í¹ÎÇÑ ÀûÀÌ
Àֱ⠶§¹®ÀÌ´Ù.
1994³â, ³ª´Â C++ ¾ð¾îÀÇ ¸·°ÇÔ°ú ±× öÇп¡ ¸Å·áµÇ¾î ÀÖ¾ú±â ¶§¹®¿¡
³» ¼ÒÇÁÆ®¿þ¾î °³¹ßµéÀ» C++ ¼¼»ó¿¡ ¸ÂÃ߾·Á°í ³ë·ÂÇß´Ù. ÇѶ§ ³ª´Â C++
±¤½Åµµ¿´´Ù. ±×¸®°í 1996³â ´ëÇÐÀ» Á¹¾÷ÇÑ µÚ, ¹Ý¸ð¼¸® °íü ¸ðµ¨ ±¸Á¶¿¡ ÀÚÁÖ
»ç¿ëµÇ´Â, ¿¬°á ¸®½ºÆ®°¡ ÁÖ ±â´ÉÀÎ ÀÚ·á ±¸Á¶ ¶óÀ̺귯¸®¸¦ ±¸ÇöÇϱ⠽ÃÀÛÇß´Ù.
( IMA ÇÁ·ÎÁ§Æ® °³¹ß ÁøÇà °úÁ¤ ÂüÁ¶ )
±× ´ç½Ã ³ª´Â ÀÛ°í, ºü¸£°í, ÀϹÝÈµÈ Äڵ带 ÀÛ¼ºÇÏ´Â °Í¿¡ °ü½ÉÀÌ ¸¹¾Ò±â ¶§¹®¿¡,
ÀÌ Á¶°ÇµéÀ» ¸¸Á·ÇÏ´Â ¿¬°á¸®½ºÆ®¸¦ ¾î¶»°Ô ¸¸µé ¼ö ÀÖÀ» Áö °í¹ÎÇß´Ù.
ÀϹÝÈ¿¡ ´ëÇØ¼´Â C++ ÅÛÇø´ÀÌ ÁÁÀº ¼±ÅÃÀÌÁö¸¸ ÅÛÇø´Àº ¼Ò½º ¼öÁØÀÇ
ÀϹÝÈ ¹Û¿¡ ÇÒ ¼ö ¾ø´Ù´Â »ç½ÇÀ» °£°úÇϱ⠽Ⱦú´Ù. ¿¹¸¦ µé¾î ÅÛÇø´ ¸Þ¼Òµå
template<class T> T add( T a, T b )
{
return a + b;
}
¸¸ÀÏ ÀÌ ¸Þ¼Òµå°¡ 'int' ¿Í 'double' Ŭ·¡½º¿¡ ´ëÇØ È£ÃâµÈ´Ù¸é,
µÎ°³ÀÇ 'add' ¸Þ¼Òµå°¡ ÃÖÁ¾ ÀÌÁø Äڵ忡 »ý¼ºµÉ °ÍÀÌ´Ù.
¸¸ÀÏ ÅÛÇø´ Äڵ峪 ÅÛÇø´ ÀÎÀÚ·Î Àü´ÞµÇ´Â Ŭ·¡½ºµéÀÌ Áõ°¡ÇÑ´Ù¸é?
±×·¡¼ ³ª´Â ¿¬°á¸®½ºÆ®¸¦ ÀÌÁø ÄÚµå ¼öÁØ¿¡¼ ÀϹÝÈ ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ»
ãÀ¸·ÁÇß°í, °á°úÀûÀ¸·Î ¸®´ª½º Ä¿³Î¿¡¼ »ç¿ëµÇ´Â ¿¬°á¸®½ºÆ®
±¸Çö ¹æ½ÄÀ» ÅÃÇß´Ù.
ÀÌ ±â¹ýÀº ÀÌÁø Æ®¸®µéÀ̳ª B Æ®¸® ¶Ç´Â ¸¹Àº ´Ù¸¥ ÀÚ·á
±¸Á¶µé¿¡ Àû¿ëµÉ ¼ö ÀÖ°í, ÅÛÇø´¿¡ ºñÇØ ¸¹Àº ½ÇÇà ÄÚµåµéÀ» Àý°¨ÇÒ ¼ö ÀÖ´Ù.
( ÀÌ ±â¹ýÀº Coral ¶óÀ̺귯¸®
ÀÇ ¿¬°á¸®½ºÆ®¿Í ÀÌÁø Æ®¸®¿¡ Àû¿ëµÇ¾ú´Ù. )
ÇÏÁö¸¸, ÀÌ ±â¹ýÀ» C++ ¿¡¼ »ç¿ëÇÏ´Â °ÍÀÌ ºÒ°¡´ÉÇѰ¡? ±×·¸Áö ¾ÊÁö¸¸,
C++ öÇп¡ ¸ÂÁö´Â ¾Ê´Â´Ù. C++ ¼¼»ó¿¡¼´Â, ÀÚ·á ±¸Á¶ÀÇ °æ¿ì ÅÛÇø´À»
ÀÌ¿ëÇØ ±¸ÇöÇÑ STL ÀÌ ÀαⰡ ÀÖ´Ù.
µÎ¹øÂ° ÀÌÀ¯´Â, C99 Ç¥ÁØ¿¡¼ °¡º¯ ¹è¿ ¸â¹ö ( FAM, Flexible Array Member ) ¶ó
ºÒ¸®´Â ´ÙÀ½°ú °°Àº ±â¹ýÀÌ C++ Ç¥ÁØ ÇÒ´çÀÚ new ·Î ±¸ÇöµÉ ¼ö ¾ø´Ù´Â Á¡ÀÌ´Ù.
struct _fam {
int my_code;
char my_name[];
};
struct _fam* fam = (struct _fam*)
malloc( (sizeof(struct _fam)+1) + strlen(name) );
C99 ³ª ÄÄÆÄÀÏ·¯ È®Àå ¾øÀÌ,
struct _fam {
int my_code;
char my_name[1];
};
struct _fam* fam = (struct _fam*)
malloc( sizeof(struct _fam) + strlen(name) );
³¡À¸·Î C °¡ ¾ð¾î Á߸³Àû ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÏ´Â °¡Àå ½¬¿î ¹æ¹ýÀ̶ó´Â Á¡À»
ÁöÀûÇÏ°í ½Í´Ù. À̸§ Àå½Ä°ú °³Ã¼ ÁöÇâÀû Ư¡Àº C++ ¸Þ¼Òµå°¡ ´Ù¸¥ ¾ð¾îµé¿¡¼
Á÷Á¢ È£ÃâµÉ ¼ö ¾ø°Ô ÇÑ´Ù. CORBA ³ª COM Àº IDL À» »ç¿ëÇϰí C++ ·Î ±¸ÇöµÉ ¼ö
ÀÖÁö¸¸, º»ÁúÀûÀ¸·Î ±×°ÍµéÀº C++ ÀÎÅÍÆäÀ̽º°¡ ¾Æ´Ï´Ù. ±×¸®°í ±×°ÍµéÀº º¸´Ù
º¹ÀâÇÑ ±¸Çö ´Ü°è¸¦ ÇÊ¿ä·Î ÇÑ´Ù. CORBA ³ª COM À» »ç¿ëÇÒ ¼ö ÀÖ´Â ÇöÁ¸ÇÏ´Â
¸ðµç ¾ð¾îµéÀº C ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö Àִµ¥´Ù°¡ ( CORBA ³ª COM À» À§ÇØ ÇÊ¿äÇÑ )
±¸Á¶Ã¼¸¦ °®Áö ¾Ê´Â Æ÷Æ®¶õ 77 °°Àº ¾ð¾î¿¡¼µµ C ÇÔ¼ö¸¦ ½±°Ô È£ÃâÇÒ ¼ö ÀÖ´Ù.
°¡Àå ´ëÇ¥ÀûÀÎ ¿¹´Â FGL, FORTRAN OpenGL ÀÌ´Ù.
C ´Â C++ ÀÇ ºÎºÐ ÁýÇÕÀ̱⠶§¹®¿¡, C ÀÇ ¸ðµç Ư¡Àº C++ ¿¡ Æ÷ÇԵǾî ÀÖ´Ù.
ÇÏÁö¸¸, ¾î¶² ¾ð¾î¸¦ »ç¿ëÇÑ´Ù¸é ±× ¾ð¾îÀÇ Ã¶ÇÐÀ» µû¶ó¾ß ÇÑ´Ù.
Æ÷Æ®¶õ½Ä C ÇÁ·Î±×·¥À» ÀÛ¼ºÇϰí ÀÖ´Ù¸é ±×³É Æ÷Æ®¶õÀ» ½á¶ó.
C ½Ä C++ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϰí ÀÖ´Ù¸é, ±×³É C ¸¦ ½á¶ó.
´õ ÀÌ»óÀÇ ÀÌÀ¯´Â ¸»ÇÏ°í ½ÍÁö ¾ÊÀºµ¥, ±×·¯ÇÑ ÀǰßÀº °³ÀÎÀû ¼ºÇâ°ú °ü·ÃµÇ¾î
³íÀïÀ» ÀÏÀ¸Å³ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¾î·µç ³ª´Â C++ ÀÌ ³ª»Û ¾ð¾î¶ó°í
»ý°¢ÇÏÁö ¾Ê´Â´Ù. C++ Àº ¸¹Àº ÁÁÀº ±â´ÉµéÀ» °¡Áö°í ÀÖ°í ¸¹Àº »ç¶÷µé ±×¸®°í
³ªµµ ±×°ÍÀ» ÁÁ¾ÆÇÑ´Ù. ³ª´Â C ·Î ±¸ÇöµÈ API ÇÔ¼öµéÀ» ĸ½¶ÈÇϰųª, À̹Ì
C++ ·Î ±¸ÇöµÇ¾îÀÖ´Â ÇÁ·Î±×·¥¿¡ ´ëÇØ C++ À» ÀÌ¿ëÇÑ´Ù.
ÅÛÇø´Àº C++ ¿¡¼ ¸Å¿ì ÁÁÀº Ư¡À̰í C ¿¡ ±×°ÍÀÌ ¾ø´Ù´Â °Ô ¾Æ½±Áö¸¸,
'#define' °ú '#include' ¸¦ ÀÌ¿ëÇØ¼ ÅÛÇø´ ºñ½ÁÇÑ Äڵ带 ÀÛ¼ºÇÒ ¼ö´Â
ÀÖ´Ù. :-)
2006.02.24 ÃÖÁ¾ ¼öÁ¤
2006.01.28 ½ÃÀÛ
ÀÌÀü | ´ë¹® | ¿µ¾î