¸Þ¼µå·Î Àμö¸¦ Àü´ÞÇÒ ¶§ ½ÇÀμö¸¦ Çü½ÄÀμö¿¡ ´ëÀÔÇϴµ¥ °ª ŸÀÔ°ú ÂüÁ¶ ŸÀÔÀ» ¸ðµÎ Àü´ÞÇÒ ¼ö ÀÖ´Ù. °ª ŸÀÔÀº »çº»ÀÌ Àü´ÞµÇ°í ÂüÁ¶ ŸÀÔÀº ÂüÁ¶ÀÚ°¡ Àü´ÞµÇ¾î ¸Þ¼µå³»¿¡¼ Çü½Ä Àμö¸¦ º¯°æÇÒ ¶§ÀÇ È¿°ú°¡ ´Ù¸£´Ù.
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)·Î È£ÃâÇÏ¸é ±¸Á¶Ã¼°¡ ÂüÁ¶ È£Ãâ·Î Àü´ÞµÈ´Ù. °ª ŸÀÔÀ» ÂüÁ¶ È£Ãâ·Î Àü´ÞÇÒ ¼ö´Â ÀÖÁö¸¸ ¹Ý´ë·Î ÂüÁ¶ ŸÀÔÀ» °ªÀ¸·Î Àü´ÞÇÏ´Â ¹æ¹ýÀº ¾ø´Ù.