C++°ú ¹®¹ýÀûÀ¸·Î ´Ù¸¥Á¡
¿©±â¼´Â C++°ú C#ÀÇ Â÷ÀÌÁ¡À» °£´ÜÈ÷ ¼³¸íÇÒ °ÍÀÌ´Ù. ¿©±â¼ ´Ù¸¥Á¡ ¸ðµç °ÍÀ» ¼³¸íÇÏ´Â °ÍÀº ¾Æ´Ï°í ±âº» ¹®¹ý ¿ä¾à Á¤µµ·Î »ý°¢ÇÏ¸é µÉµíÇÏ´Ù. ¿©±â¼ ¼³¸íÇÏ´Â ³»¿ëÀº C++°ú ´Ù¸¥Á¡ÀÌÁö C++ .NET°ú ´Ù¸¥Á¡À̶ó°í »ý°¢ÇÏ¸é ¾ÈµÈ´Ù.
1. Header ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù.
C++¿¡¼ Class ¼±¾ðÀ» Header(.h)¿¡ Çϰí #include¸¦ »ç¿ëÇÏ¿© ±× Header ÆÄÀÏÀ» Æ÷ÇÔ ½ÃÅ´¿¡ ÀÇÇØ .cppÆÄÀÏÀÇ Class¸¦ »ç¿ëÇϵµ·Ï ÇÑ´Ù. ±×·¯³ª C#Àº .cs ÆÄÀϸ¸À¸·Î ±¸¼ºµÈ´Ù. ½ÇÁ¦ C++¿¡¼ HeaderÆÄÀÏÀº Çü¼±¾ðÀ» ÇÏ¿© ±× Class¸¦ »ç¿ëÇÑ´Ù°í ÄÄÆÄÀÏ·¯¿¡°Ô ¾Ë·ÁÁÖ´Â ¿ªÇÒÀ» ¼öÇàÇÑ´Ù. ÀÌ ºÎºÐÀ» Çϱâ À§Çؼ Header ÆÄÀÏÀ» ¸¸µå´Â Àϵµ ¾à°£À̳ª¸¶ ¹ø°Å·¯¿î ÀÏÀÌ´Ù. C#Àº °°Àº ÇÁ·ÎÁ§Æ®¿¡ .cs·Î Á¸ÀçÇϰųª ´Ù¸¥ ¾î¼Àºí¸®(.exe, .dll)ÀÏ °æ¿ì ÂüÁ¶(ÇâÈÄ ¼³¸í)¸¸ Çϸé ÀÚµ¿À¸·Î ÀνÄÇÏ¿© ÄÄÆÄÀÏÀ» ÇϰԵȴÙ.
2. Namespace¶ó´Â °³³äÀÌ Ãß°¡ µÇ¾ú´Ù.
Namespace´Â Class¸¦ °¨½Î´Â ´ëÇ¥À̸§À̶ó°í »ý°¢ÇÏ¸é µÈ´Ù. ¿©·¯°³ÀÇ Class¸¦ Á¦ÀÛÇÏ¿© ÇϳªÀÇ ´ëÇ¥À̸§À» ºÙ¿© ³õÀº °ÍÀÌ namespace´Ù. À̰ÍÀº °°Àº À̸§ÀÇ Class¸¦ ¿©·¯°³ ¸¸µé¼ö ÀÖµµ·Ï Çϴµ¥, °°Àº À̸§ÀÇ Class°¡ ´Ù¸¥ namespace¿¡ Á¸ÀçÇÏ¸é ±¸ºÐÀÌ °¡´ÉÇÏ°Ô µÈ´Ù.
¿©±â¼ ¼³¸íÀÇ ÆíÀÇ»ó Class¶ó°í ÇßÀ¸³ª Class´Â TypeÀÇ ´ëÇ¥Àû Á¾·ùÀÌ´Ù.
Type
- Struct
- Enum
- Class
- Interface
- Delegate
Delegate¸¸ Á¦¿ÜÇÏ¸é ¸ðµÎ C++¿¡µµ ÀÖ´Â °³³äÀÌ´Ù. Delegate´Â Event¿Í ½ÖÀ¸·Î »ç¿ëÇϴµ¥ C# ¹®¹ý¿¡¼ °¡Àå Áß¿äÇÑ °³³äÀÌ´Ù. ÀÚ¼¼ÇÑ ¼³¸íÀº µÎ ¹øÂ° °ÀÇ¿¡¼ ¼³¸íÇϵµ·Ï ÇϰڴÙ.
Âü°í·Î Struct¿Í Class´Â C#¿¡¼ °ÅÀÇ °°Àº ±â´ÉÀ» ¼öÇàÇÑ´Ù. Structµµ Method(ÇÔ¼ö), Property(º¯¼ö)µî ¸ðµç Member¸¦ °¡Áú ¼ö ÀÖ´Ù. ´Ù¸¸ Class´Â »ó¼ÓÀÌ °¡´ÉÇϰí Struct´Â ºÒ°¡´ÉÇÏ´Ù´Â °Í¸¸ ´Ù¸£´Ù. ÀÌ µÎ°¡ÁöÀÇ Â÷ÀÌ´Â ¸¸µé¶§ÀÇ ¸ñÀûÀ» »ý°¢ÇÏ¸é ±â¾ïÇϱâ ÁÁ´Ù. Struct´Â ºü¸¥ µ¥ÀÌÅÍ Ã³¸®¸¦ À§ÇØ ¸¸µé¾î Á³°í, Class´Â ´Ù¾çÇÑ °¡Áö ±â´ÉÀ» °¡Áú¼ö ÀÖµµ·Ï ¸¸µé¾î Á³´Ù. »ó¼ÓÀº ¼Óµµ´Â ÀúÇϵdzª ´Ù¾çÇÑ ±â´ÉÀ» Áö¿øÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.
Member
- Field
- Method
- Property
- Event
¿©±â¼µµ Event¸¸ Á¦¿ÜÇÏ¸é ¸ðµÎ C++¿¡ ÀÖ´Â °³³äÀÌ´Ù.
3. using
À§¿¡¼ ¼³¸íÇÑ ¹Ù´ë·Î namespace¶ó´Â °³³äÀÌ Ãß°¡µÇ¾î °°Àº À̸§ÀÇ TypeÀ» ¿©·¯°³ ÀÛ¼ºÇÒ ¼ö ÀÖµµ·Ï µÇ¾ú´Ù. ±×·¯³ª À̰³³ä¿¡ ÀÇÇØ MethodÇϳª È£ÃâÇϱâ À§ÇØ Namespace.Type.MethodÀÇ ÇüÅ·ΠȣÃâÇØ¾ß¸¸ÇÑ´Ù.
Áï MessageBoxÇϳª È£ÃâÇϱâ À§ÇØ System.Windows.Forms.MessageBox.Show("Hellow World")¶ó°í È£ÃâÇØ¾ß¸¸ ÇÏ´Â ¹ø°Å·Î¿òÀÌ ÀÖ´Ù. ¿©±â¼ System.Windows.Forms°¡ Namespace´Ù(Type ¹× Member´Â »çÀÌ¿¡ .À» ³ÖÁö ¾ÊÀ¸¹Ç·Î ±¸ºÐÀÌ ½±°Ô µÉ°ÍÀÌ´Ù). ÀÌ Namespace¸¦ »ý·«ÇÏ°í ¾µ¼ö ÀÖ´Â ¹æ¹ýÀÌ Àִµ¥ À̰ÍÀÌ ¹Ù·Î usingÀÌ´Ù.
Áï using System.Windows.Forms¸¦ ¼±¾ðÇÏ¿© ÄÄÆÄÀÏ·¯¿¡°Ô namespace »ç¿ëÀ» ¾Ë·Á ÁØ ÈÄ MessageBox.Show("Hellow World")¶ó°í È£ÃâÇÏ¸é °°Àº ±â´ÉÀ» ¼öÇàÇÏ°Ô µÈ´Ù.
4. delete°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù.
C#Àº new·Î ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ´Â °ÍÀº C++°ú °°À¸³ª ¸Þ¸ð¸®¸¦ »èÁ¦ÇÏ´Â delete°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù. ¸Þ¸ð¸® »èÁ¦´Â °¡ºñÁöÄ÷ºÅͰ¡ »ç¿ëÇÏÁö ¾Ê´Â ½ÃÁ¡¿¡ ¾Ë¾Æ¼ »èÁ¦¸¦ ÇØ ÁØ´Ù.
5. Æ÷ÀÎÅͰ¡ ¾ø¾îÁ³´Ù.
C, C++¿¡¼ Ãʺ¸ÀÚ¸¦ ±«·ÓÈ÷´Â °ÍÀÌ Æ÷ÀÎÅÍÀÌ´Ù. Æ÷ÀÎÅÍ ±³À°½Ã Àß»ç¿ëÇÏ´Â ¿¹Á¦´Â ´ÙÀ½°ú °°´Ù.
void Swap(int *data1, int *data2) { int dataBuff; dataBuff = *data1; *data1 = *data2; *data2 = dataBuff; } int nValue1 = 100, nValue2 = 200; Swap(&nValue1, &nValue2); |
¹¹ ´Ùµé ¾Ë°ÚÁö¸¸ Swap¿¡ nValue1°ú nValue2ÀÇ ÁÖ¼Ò¸¦ ³Ñ°Ü ÁÖ¾î ÁÖ¼ÒÀÇ ³»¿ëÀ» ¼·Î ¹Ù²Ù¹Ç·Î ½ÇÁ¦ ³»¿ëÀÌ nValue1Àº 200À¸·Î nValue2´Â 100À¸·Î ¹Ù²î¾î µé¾î°¡°Ô µÈ´Ù.
C++¿¡¼´Â ´ÙÀ½°ú °°ÀÌ ·¹ÆÛ·±½º °³³äÀÌ »ý°å´Ù.
void Swap(int &data1, int &data2) { int dataBuff; dataBuff = data1; data1 = data2; data2 = dataBuff; } int nValue1 = 100, nValue2 = 200; Swap(nValue1, nValue2); |
·¹ÆÛ·±½º¸¦ »ç¿ëÇÔÀ¸·Î ÇØ¼ Æ÷ÀÎÅ͸¦ »ç¿ëÇѰͰú °°ÀÌ Swap ±â´ÉÀ» ±¸ÇöÇÑ °ÍÀÌ´Ù. Á» º¸±â°¡ ÆíÇØÁø °¨ÀÌ ÀÖ´Ù.
C#¿¡¼´Â ·¹ÆÛ·±½º¸¸ »ç¿ëÇÒ ¼ö Àִµ¥ »ç¿ë ¶ÇÇÑ ´ÙÀ½°ú °°ÀÌ ¹Ù²î¾ú´Ù.
void Swap(ref int data1, ref int data2) { int dataBuff; dataBuff = data1; data1 = data2; data2 = dataBuff; } int nValue1 = 100, nValue2 = 200; Swap(ref nValue1, ref nValue2); |
ref ´ë½Å in(ÀÔ·Â Àü¿ë), out(Ãâ·Â Àü¿ë)À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
6. ±âº»ÀûÀ¸·Î sizeof¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù.
C³ª C++¿¡¼ sizeof´Â ¸¹ÀÌ »ç¿ëÇÏ´Â ±â´ÉÀÌ´Ù. ±×·¯³ª C#¿¡¼´Â sizeof°¡ ³»ºÎÀûÀ¸·Î ¸Þ¸ð¸®¸¦ Á÷Á¢ ´Ù·ç´Â ¸í·É¾î À̹ǷΠ±ÇÀåÇÏÁö ¾Ê´Â´Ù. sizeof´Â ±¸Á¶Ã¼ º¹»ç¿Í ÆÄÀÏ¿¡¼ºÎÅÍ ÀÐÀ» ¶§ ±× ±¸Á¶Ã¼ÀÇ Å©±â¸¦ ±¸ÇÒ ¶§ °¡Àå ¸¹ÀÌ »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î ´ÙÀ½°ú °°Àº °æ¿ìÀÌ´Ù.
typedef struct Size { int cx; int cy; } Size size1(10, 20), size2; memcpy(&size2, &size1, sizeof(Size)); |
À̰ÍÀº C#¿¡¼ ´Ü¼øÈ÷ =À» »ç¿ëÇÏ¸é º¹»ç°¡ ÀÌ·ç¾î Áø´Ù.
struct Size { public int cx; public int cy; } Size size1(10, 20), size2; size2 = size1; |
¶ÇÇÑ ÆÄÀϷκÎÅÍ ÀÐ°í ¾µ¶§´Â ±¸Á¶Ã¼ Member Method·Î Save¿Í Load¸¦ ¸¸µé¾î °³º° Member º¯¼ö¸¦ ÀÐÀ» ¼ö ÀÖµµ·Ï ±¸¼ºÇÏ¸é µÈ´Ù.
Âü°í·Î ²À sizeof¸¦ »ç¿ëÇØ¾ß ÇÏ´Â °æ¿ì¶ó¸é sizeof¸¦ »ç¿ëÇÏ´Â Äڵ带 unsafe{}·Î °¨½Î ÁÖ°í, ÇÁ·ÎÁ§Æ® ¼Ó¼º¿¡¼ ¾ÈÀüÇÏÁö ¾ÊÀº ÄÚµå ºí·Ï Çã¿ëÀ» True·Î ¼³Á¤ÇØ¾ß ÇÑ´Ù. ±×·¯³ª ȣȯ¼ºµµ ¶³¾îÁö°í ¾ÈÀüÇÏÁö ¾ÊÀ¸¹Ç·Î °¡´ÉÇÏ¸é »ç¿ëÇÏÁö ¸»±â ¹Ù¶õ´Ù.
7. µ¥ÀÌÅÍ Çü
µ¥ÀÌÅÍ ÇüÀº C#°ú C++Àº °ÅÀÇ °°´Ù. ´Ù¸¥ ºÎºÐÀ̶ó¸é char, long, decimalÀÌ´Ù. char´Â ÇϳªÀÇ ¹®ÀÚ¸¦ ÀúÀåÇÏ´Â ±â´ÉÀ» ¼öÇàÇϸç C++°ú ´Ù¸£°Ô 2byte¸¦ Â÷Áö ÇÑ´Ù. C++¿¡¼´Â ASCII Äڵ带 »ç¿ëÇÏ¿´À¸³ª C#¿¡¼´Â À¯´ÏÄÚµå(Àü¼¼°è¾ð¾î¸¦ 2byteÄÚµå·Î ³ªÅ¸³½°Í)¸¦ »ç¿ëÇÑ´Ù. Âü°í·Î 1byte¸¦ Â÷ÁöÇÏ´Â µ¥ÀÌÅÍ ÇüÀº byte¿Í sbyte°¡ ÀÖ´Ù. longÀº C++¿¡¼´Â 4byte¸¦ Â÷Áö ÇßÀ¸³ª C#¿¡¼´Â 8byte¸¦ Â÷ÁöÇÑ´Ù. decimalÀº 8byte »ó¼ö·Î Ãß°¡µÇ¾ú´Ù.
8. ¹è¿ ¼±¾ð
C++¿¡¼´Â ¹è¿À» ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇßÀ» °ÍÀÌ´Ù.
int arr[30];
C#¿¡¼´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÑ´Ù.
int[] arr = new int[30];
9. if Á¶°Ç¹®
int a = 1, b = 8; if(a && b >= 5) |
À§ ¹®ÀåÀº C++¿¡¼ ´ç¿¬È÷ ÂüÀÌ´Ù. ±×·¯³ª C#¿¡¼´Â ÄÄÆÄÀÏ ¿¡·¯°¡ ³ªÅ¸³´Ù. À§ ¹®ÀåÀº if(a!=0 && b >= 5)·Î ¼öÁ¤Çؾ߸¸ ÇÑ´Ù. Á¶°Ç¹® ³»ºÎ¿¡´Â boolenÀ¸·Î ±¸¼ºµÇ¾î¾ß ÇÑ´Ù. À̰ÍÀº C++¿¡¼µµ ¸¶Âù°¡Áö¿´´Ù. ±×·¯³ª C#¿¡¼´Â Çüº¯È¯ ±ÔÄ¢ÀÌ ¾ö°ÝÇØÁ³´Ù. µû¶ó¼ À§ ¹®Àå¿¡¼ a´Â boolenº¯¼ö°¡ ¾Æ´Ï¹Ç·Î ¿¡·¯°¡ ³ªÅ¸³ª´Â °ÍÀÌ´Ù. À̰ÍÀº ´ÙÀ½°ú °°Àº ¿À·ù¸¦ ÁÙ¿© ÁØ´Ù.
if(a == 1)À̶ó°í ÇØ¾ß ÇÏ´Â ÀÚ¸®¿¡ if(a = 1)¶ó°í Çϸé À§¿Í °°Àº ÀÌÀ¯·Î C#¿¡¼´Â ÄÄÆÄÀÏ ¿¡·¯¸¦ ³»¾î ÁØ´Ù. ÀÌ ½Ç¼ö´Â ÇѹøÂëÀº ÇØºÃÀ¸¸®¶ó ¿¹»óÀÌ µÈ´Ù.
±×·¯³ª C#¿¡¼µµ a°¡ boolenÀ¸·Î ¼±¾ðµÇ¾ú´Ù¸é if(a = 1)Àº ¿¡·¯°¡ ³ªÅ¸³ªÁö ¾ÊÀ» °ÍÀÌ´Ù.
10. switch ¹®
switch(a) |
À§¹®ÀåÀº C++¿¡¼´Â ÀÌ»óÀÌ ¾øÀ¸³ª C#¿¡¼´Â ÄÄÆÄÀÏ ¿¡·¯°¡ ³ªÅ¸³´Ù. break¾øÀÌ ´ÙÀ½ case·Î ³Ñ¾î°¡´Â °ÍÀ» Çã¿ëÇÏÁö ¾Ê´Â´Ù. ¿¹¿Ü·Î ¾Æ·¡¿Í °°ÀÌ Ã¹ ¹øÂ° case ¹®¿¡ ¾Æ¹«°Íµµ ÇÏÁö ¾Ê°í ´ÙÀ½ case·Î ³Ñ¾î °¡´Â °ÍÀº Çã¿ëÇÑ´Ù.
switch(a) |
11. ¹Ýº¹¹®
int[] arr = new int[30]; |
À§ ¹®ÀåÀ» ½ÇÇàÇϸé 0 ÀÌ 30¹ø Ãâ·ÂµÈ´Ù(new¸¦ »ç¿ëÇÏ¸é µ¥ÀÌÅͰ¡ 0À¸·Î ÃʱâÈ µÇ´Â °ÍÀ» º¸ÀåÇÑ´Ù). C#¿¡¼´Â ´ÙÀ½°ú °°ÀÌ ÇØµµ °°Àº ±â´ÉÀ» ¼öÇàÇÑ´Ù.
int[] arr = new int[30]; |
Âü°í·Î WriteÀÇ {0}´Â ù ¹øÂ° ÀÎÀÚ¶ó´Â ¶æÀÌ´Ù.
12. static ¸Þ¼µå
C++¿¡¼´Â ¿ÜºÎº¯¼ö¿Í ¿ÜºÎÇÔ¼ö ¼±¾ð(C±â´É)ÀÌ °¡´ÉÇß´Ù. ±×·¯³ª C#Àº ¿Ïº®ÇÑ OOP°³³äÀÇ ¾ð¾îÀ̹ǷΠÀÌ µÎ°¡Áö¸¦ ÀüÇô Áö¿øÇÏÁö ¾Ê°í Type ³»¿¡ ¼±¾ðÇØ¾ß ÇÑ´Ù. Type³»¿¡ ¸Þ¼µå¸¦ ¼±¾ðÇϸé È£Ãâ½Ã ´ÙÀ½°ú °°ÀÌ ÇØ¾ß¸¸ÇÑ´Ù.
class Calc |
Calc calc = new Calc;
double result = calc.Add(1, 2);
±×·¯³ª Add ¸Þ¼µå¸¦ È£ÃâÇϱâ À§ÇÏ¿© ¹«Á¶°Ç À§¿Í °°ÀÌ ÇØ¾ß ÇÏ´Â °ÍÀº ¾à°£ ¹ø°Å·Ó´Ù. µû¶ó¼ Type³»ÀÇ ¸Þ¼µå¸¦ staticÀ¸·Î ¼±¾ðÇÏ´Â °ÍÀ» Áö¿øÇÑ´Ù.
class Calc |
double result = Calc.Add(1, 2);
Áï static ¸Þ¼µå´Â ClassÀ̸§.¸Þ¼µåÀÇ ÇüÅ·Π¹Ù·Î È£ÃâÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. Âü°í·Î 9¹ø ¹Ýº¹¹®¿¡¼ Console.Write´Â Write¸¦ static ¸Þ¼µå·Î ¼±¾ð Ç߱⠶§¹®¿¡ È£Ãâ°¡´ÉÇÑ ±¸Á¶ÀÌ´Ù.
13. C++ Àº ´ÙÁß »ó¼ÓÀÌ °¡´ÉÇϳª C#Àº ´ÜÀÏ »ó¼Ó¸¸ °¡´ÉÇÏ´Ù.
Class Calc1, Calc2, Calc3°¡ ÀÖ´Ù°í °¡Á¤Çϰí Calc3°¡ Calc1ÀÇ ±â´É°ú Calc2ÀÇ ±â´ÉÀ» ¸ðµÎ »ç¿ëÇØ¾ß ÇÑ´Ù¸é, C++¿¡¼´Â class Calc3 : public Calc1, public Calc2 ¶ó°í ¼±¾ðÇÏ¿© °¡´ÉÇß´Ù. ±×·¯³ª C#¿¡¼´Â À̰ÍÀ» Çã¿ëÇÏÁö ¾Ê´Â´Ù. ±»ÀÌ »ç¿ëÇϰíÀÚ ÇÑ´Ù¸é Calc2¸¦ Calc1À¸·ÎºÎÅÍ »ó¼Ó¹Þµµ·Ï Çϰí Calc3´Â Calc2·Î »ó¼Ó¹Þ¾Æ °èÃþÀû ±¸Á¶¸¦ ÀÌ·ç¾î¾ß¸¸ ÇÑ´Ù.
À̰ÍÀº ¾î¶²¸é¿¡¼ C#ÀÇ ´ÜÁ¡À̶ó°í ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ´ÙÁß»ó¼ÓÀº À߸ø »ç¿ëÇϸé ÇÁ·Î±×·¡¸Ó¿¡°Ô ¾öû³ ¿À·ù¸¦ ¹üÇÏ°Ô ÇÑ´Ù°í ÇÑ´Ù. ±× ¿À·ùÀÇ °¡´É¼ºÀ» »çÀü¿¡ Â÷´ÜÇß´Ù¶ó°í º¸¸é µÉµíÇÏ´Ù.
±âº» ¹®¹ý ¼³¸íÀº ¿©±â±îÁö ÇϰڴÙ. ³ª¸ÓÁö´Â ÇÁ·Î±×·¡¹ÖÀ» ÇÏ¸é¼ Â÷ÃûÀÍÈ÷±â ¹Ù¶õ´Ù.
¿©±â¼ ÀÌÇØ°¡ ¾ÈµÈ´Ù°í ³Ê¹« ±«·Î¿öÇÏÁö ¸»±â ¹Ù¶õ´Ù. ÇÁ·Î±×·¡¹ÖÀº ¸ðµç ¹®¹ýÀ» ´Ù ¿Ü¿ö¼ ÇÏ´Â °ÍÀÌ ¾Æ´Ï´Ù. »ç¿ëÇÏ¸é¼ ÀúÀý·Î ÀÍÈ÷´Â °ÍÀÌ´Ù.