ÀÌÀü | ´ë¹® | ¿µ¾î

³»°¡ 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 ½ÃÀÛ



ÀÌÀü | ´ë¹® | ¿µ¾î