4-2-1.Àμö Àü´Þ ¹æ½Ä

¸Þ¼­µå·Î Àμö¸¦ Àü´ÞÇÒ ¶§ ½ÇÀμö¸¦ Çü½ÄÀμö¿¡ ´ëÀÔÇϴµ¥ °ª ŸÀÔ°ú ÂüÁ¶ ŸÀÔÀ» ¸ðµÎ Àü´ÞÇÒ ¼ö ÀÖ´Ù. °ª ŸÀÔÀº »çº»ÀÌ Àü´ÞµÇ°í ÂüÁ¶ ŸÀÔÀº ÂüÁ¶ÀÚ°¡ Àü´ÞµÇ¾î ¸Þ¼­µå³»¿¡¼­ Çü½Ä Àμö¸¦ º¯°æÇÒ ¶§ÀÇ È¿°ú°¡ ´Ù¸£´Ù.

 

CallType

½ÇÇà°á°ú

using System;

 

class CSTest {

     public static void method1(CTime t) {

          t.hour = 12;

     }

     public static void method2(STime t) {

          t.hour = 12;

     }

     static void Main() {

          CTime C = new CTime();

          C.hour = 9;

          STime S;

          S.hour = 9;

          method1(C);

          method2(S);

          Console.WriteLine("Ŭ·¡½º : " + C.hour);

          Console.WriteLine("±¸Á¶Ã¼ : " + S.hour);

     }

}

 

 

class CTime {

     public int hour;

}

 

struct STime {

     public int hour;

}

Ŭ·¡½º : 12

±¸Á¶Ã¼ : 9

 

±¸Á¶Ã¼¿Í Ŭ·¡½º¸¦ °°Àº ¸ð¾çÀ¸·Î ¼±¾ðÇØ ³õ°í °¢ ŸÀÔÀ» Àμö·Î ¹Þ´Â method1, method2¸¦ Á¤ÀÇÇß´Ù. µÎ ¸Þ¼­µå ¸ðµÎ Çü½Ä ÀμöÀÇ hour Çʵ忡 12¸¦ ´ëÀÔÇÑ´Ù. µÎ ŸÀÔÀÇ º¯¼ö C¿Í S¸¦ ¼±¾ðÇÏ¿© hour Çʵ带 9·Î ÃʱâÈ­ÇÑ ÈÄ µÎ ¸Þ¼­µå·Î Àü´ÞÇß´Ù. method1¿¡¼­ Çʵ带 º¯°æÇÏ¸é ¿øº»ÀÎ C °´Ã¼ÀÇ Çʵ嵵 º¯°æµÈ´Ù. ±×·¡¼­ ¿ø·¡ ´ëÀÔµÈ 9°¡ ¾Æ´Ï¶ó ¸Þ¼­µå¿¡¼­ ¼öÁ¤ÇÑ 12°¡ Ãâ·ÂµÈ´Ù.

¹Ý¸é method2¿¡¼­ ¾Æ¹«¸® ±¸Á¶Ã¼ÀÇ Çʵ带 ¼öÁ¤ÇØ ºÁ¾ß »çº»¸¸ ¼öÁ¤µÉ »Ó ¿øº»ÀÎ S´Â º¯È­°¡ ¾ø´Ù. ÀÌ µÎ Á¾·ùÀÇ È£Ãâ ¹æ¹ýÀ» °ª È£Ãâ, ÂüÁ¶ È£ÃâÀ̶ó°í ºÎ¸¥´Ù. C¿¡¼­´Â Àμö°¡ Æ÷ÀÎÅÍÀΰ¡ ¾Æ´Ñ°¡·Î °áÁ¤µÇÁö¸¸ C#¿¡¼­´Â º¯¼öÀÇ ÇüÅÂ¿Í »ó°ü¾øÀÌ °ª È£Ãâ°ú ÂüÁ¶ È£ÃâÀ» ¼±ÅÃÇÏ´Â ¹æ¹ýÀ» Á¦°øÇÑ´Ù. ±¸Á¶Ã¼°°Àº Å« ŸÀÔÀº ºñ·Ï °ªÀÌÁö¸¸ º¹»çÇؼ­ ³Ñ±â¸é ³Ê¹« ´À·Á ÂüÁ¶·Î Àü´ÞÇÒ ¼öµµ ÀÖ´Ù.

ÀÌ ¹æ¹ýÀ» ¿¬±¸ÇØ º¸·Á¸é ¸ÕÀú º¯¼öÀÇ ¹üÁÖ(Category)¿¡ ´ëÇØ ¾Ë¾Æ¾ß ÇÑ´Ù. º¯¼öÀÇ ¹üÁÖ¶õ ¼±¾ðµÇ´Â À§Ä¡¿¡ µû¶ó ±¸ºÐµÇ´Â º¯¼öÀÇ Æ¯¼ºÀ̸ç CÀÇ ±â¾ï ºÎ·ù(Storage Class)¿Í ºñ½ÁÇÑ °³³äÀÌ´Ù. C#Àº º¯¼ö¸¦ 7°³ÀÇ ¹üÁÖ·Î ºÐ·ùÇÑ´Ù.

 

l  Áö¿ªº¯¼ö : ¸Þ¼­µåÀÇ ³»ºÎ ¶Ç´Â { } ºí·Ï ³»¿¡ ¼±¾ðµÇ´Â º¯¼öÀÌ´Ù. ºí·Ï³»¿¡¼­¸¸ »ç¿ëµÇ¸ç ºí·ÏÀÌ Á¾·áµÇ¸é ÀÚµ¿À¸·Î »ç¶óÁø´Ù. º°µµÀÇ ÃʱⰪÀÌ ¾øÀ¸¸é ¾²·¹±â°ªÀ» °¡Áø´Ù.

l  ÀνºÅϽº º¯¼ö : Ŭ·¡½º ³»¿¡ ¼±¾ðµÇ¸ç Ŭ·¡½º ŸÀÔÀÇ °´Ã¼¿¡ ¼Ò¼ÓµÈ´Ù. °´Ã¼¿Í ÇÔ²² »ý¼ºµÇ°í °´Ã¼°¡ Æı«µÉ ¶§±îÁö Á¸ÀçÇÑ´Ù. Çʵå¶ó°í ºÎ¸£´Â ¸â¹ö º¯¼ö°¡ ÀÌ ¹üÁÖ¿¡ ¼ÓÇÑ´Ù.

l  Á¤Àû º¯¼ö : Ŭ·¡½º ³»¿¡ static Å°¿öµå¿Í ÇÔ²² ¼±¾ðµÈ´Ù. °´Ã¼°¡ ¾Æ´Ñ Ŭ·¡½º¿¡ ¼Ò¼ÓµÈ´Ù. Á¤Àû º¯¼ö´Â °´Ã¼ ÀÌÀü¿¡ »ý¼ºµÇ¾î ÇÁ·Î±×·¥ÀÌ Á¾·áµÉ ¶§ »ç¶óÁø´Ù. CÀÇ Àü¿ªº¯¼ö¿Í ºñ½ÁÇÏµÇ Å¬·¡½º¿¡ ¼Ò¼ÓµÈ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. C#¿¡¼­ ÁøÁ¤ÇÑ ÀǹÌÀÇ Àü¿ªº¯¼ö´Â Á¸ÀçÇÏÁö ¾Ê´Â´Ù.

l  ¹è¿­ ¿ä¼Ò : ¹è¿­ÀÇ ÇÑ ¿ä¼Ò·Î »ý¼ºµÈ´Ù. ¹è¿­ÀÌ »ý¼ºµÉ ¶§ °°ÀÌ »ý¼ºµÇ¸ç ¹è¿­ÀÌ ÇØÁ¦µÉ ¶§ Æı«µÈ´Ù. ¼±¾ð¹®ÀÇ ÃʱⰪ´ë·Î ÃʱâÈ­µÇ¸ç ±×·¸Áö ¾ÊÀ¸¸é µðÆúÆ® °ª(º¸Åë 0)À¸·Î ÃʱâÈ­µÈ´Ù.

l  °ª Àμö : ¸Þ¼­µåÀÇ Àμö·Î ¼±¾ðµÇ¸ç ¸Þ¼­µå°¡ È£ÃâµÉ ¶§ »ý¼ºµÈ´Ù. È£Ãâ¿ø¿¡¼­ Àü´ÞÇÑ ½ÇÀμöÀÇ °ªÀ¸·Î ÃʱâÈ­µÇ¸ç ¸Þ¼­µå°¡ ¸®ÅÏÇÒ ¶§ Æı«µÈ´Ù.

l  ÂüÁ¶ Àμö : °ª Àμö¿Í °°µÇ ¾Õ¿¡ ref Å°¿öµå¸¦ ºÙÀδÙ. ½ÇÀμöÀÇ °ªÀÌ ¾Æ´Ñ ½ÇÀμö¸¦ °¡¸®Å°´Â ÂüÁ¶ÀÚ·Î ÃʱâÈ­µÈ´Ù.

l  Ãâ·Â¿ë Àμö : ÂüÁ¶ Àμö¿Í °°µÇ ¾Õ¿¡ out Å°¿öµå¸¦ ºÙÀδÙ. ÃʱâÈ­ÇÒ ÇÊ¿ä°¡ ¾ø°í ¸Þ¼­µå´Â ¸®ÅÏÇϱâ Àü¿¡ ¹Ýµå½Ã °ªÀ» ´ëÀÔÇØ¾ß ÇÑ´Ù.

 

ÀÌ Áß À§ÂÊ ¼¼ °¡Áö´Â Ŭ·¡½º °ü·Ã Àå¿¡¼­ µû·Î ¾Ë¾Æº¸µµ·Ï ÇÏ°í ¹è¿­ ¿ä¼Ò ¹üÁÖ´Â ´õ ÀÌ»ó ¼³¸íÇÒ°Ô ¾ø´Ù. µÚÂÊ ¼¼ °³ÀÇ Àμö ¹üÁÖ¿¡ ´ëÇؼ­¸¸ Å×½ºÆ®ÇØ º¸ÀÚ.

 

Category

½ÇÇà°á°ú

using System;

 

class CSTest {

     public static void PlusOne(int p) { p++; }

     public static void PlusOneRef(ref int p) { p++; }

     public static void GetValue(out int p) { p = 1234; }

 

     static void Main() {

          int a = 1, b;

          PlusOne(a);

          Console.WriteLine($"a = {a}");

          PlusOneRef(ref a);

          Console.WriteLine($"a = {a}");

          GetValue(out b);

          Console.WriteLine($"b = {b}");

     }

}

a = 1

a = 2

b = 1234

 

°¢ ¹üÁÖÀÇ Àμö¸¦ ¹Þ´Â ¼¼ °³ÀÇ ¸Þ¼­µå¸¦ Á¤ÀÇÇÏ°í Â÷·Ê´ë·Î È£ÃâÇß´Ù. PlusOne ¸Þ¼­µå´Â Àμö¿¡ º°´Ù¸¥ ¼ö½ÄÀÌ ¾ø¾î °ª È£ÃâÀ» »ç¿ëÇÑ´Ù. Çü½Ä Àμö p´Â ½ÇÀμöÀÇ °ªÀ» ´ëÀÔ¹ÞÀº »çº»ÀÏ »ÓÀ̾ ¸Þ¼­µå°¡ °ªÀ» º¯°æÇصµ ½ÇÀμö´Â ¹Ù²îÁö ¾Ê´Â´Ù. ¸Þ¼­µå ¸®ÅÏÈÄ¿¡µµ ½ÇÀμö aÀÇ °ªÀº ¿©ÀüÈ÷ 1ÀÌ´Ù.

PlusRef ¸Þ¼­µå´Â Àμö ¾Õ¿¡ ref Å°¿öµå¸¦ ºÙ¿© ÂüÁ¶ È£ÃâÀ» »ç¿ëÇÑ´Ù. È£ÃâÇÒ ¶§µµ ½ÇÀμö ¾Õ¿¡ ref Å°¿öµå¸¦ ºÙÀδÙ. p¿¡ ´ëÇØ º¯°æÀ» °¡ÇÏ¸é ½ÇÀμöµµ °°ÀÌ º¯°æµÇ¸ç ¸Þ¼­µå ¸®ÅÏ ÈÄ a´Â 2·Î Áõ°¡µÇ¾î ÀÖ´Ù. ÂüÁ¶ È£Ãâ Àμö´Â ¹Ýµå½Ã ÃʱâÈ­ÇØ¾ß ÇÏ¸ç ±×·¸Áö ¾ÊÀ¸¸é ¿¡·¯ 󸮵ȴÙ.

PlusOut ¸Þ¼­µå´Â out Å°¿öµå¸¦ ºÙ¿© Ãâ·Â¿ë Àμö¸¦ »ç¿ëÇÑ´Ù. È£ÃâÃø¿¡¼­µµ out Å°¿öµå¸¦ ºÙÀδÙ. Çü½Ä Àμö¸¦ ¹Ù²Ù¸é ½ÇÀμöµµ ¿µÇâÀ» ¹Þ´Â °ÍÀº ÂüÁ¶È£Ãâ°ú °°Áö¸¸ ¸Þ¼­µå³»¿¡¼­ °ªÀ» º¯°æÇϵµ·Ï µÇ¾î ÀÖ¾î ½ÇÀμö¸¦ ²À ÃʱâÈ­ÇÏÁö ¾Ê¾Æµµ »ó°ü ¾ø´Ù. ÇÔ¼ö´Â ¸®ÅÏÇϱâ Àü¿¡ Ãâ·Â¿ë Àμö¿¡ °ªÀ» ´ëÀÔÇØ¾ß ÇÑ´Ù.

ÀμöÀÇ ¹üÁÖ¸¦ ÁöÁ¤ÇÏ´Â ref, out Å°¿öµå¸¦ »ç¿ëÇÏ¸é °ª ŸÀÔÀÎ ±¸Á¶Ã¼¸¦ ÂüÁ¶ È£Ãâ·Î Àü´ÞÇÒ ¼ö ÀÖ´Ù. CallType ¿¹Á¦¿¡¼­ method2 ¸Þ¼­µåÀÇ Àμö STime t¸¦ ref STime t·Î ¼öÁ¤ÇÏ°í È£ÃâÇÒ ¶§µµ method2(ref S)·Î È£ÃâÇÏ¸é ±¸Á¶Ã¼°¡ ÂüÁ¶ È£Ãâ·Î Àü´ÞµÈ´Ù. °ª ŸÀÔÀ» ÂüÁ¶ È£Ãâ·Î Àü´ÞÇÒ ¼ö´Â ÀÖÁö¸¸ ¹Ý´ë·Î ÂüÁ¶ ŸÀÔÀ» °ªÀ¸·Î Àü´ÞÇÏ´Â ¹æ¹ýÀº ¾ø´Ù.