¼Ò¼³°°ÀºC#  Á¦2°­ÀÇ Å¬·¡½ºÀÇ ±âº»¹è°æ  17. out¿¡ ÀÇÇÑ ÂüÁ¶  

 

 

2.17 out¿¡ ÀÇÇÑ ÂüÁ¶(Reference)

 

 

ref Ű¿öµå¸¦ ÀÌ¿ëÇÑ ÂüÁ¶¿¡¼­ ¹Ýµå½Ã ÂüÁ¶ÇÒ º¯¼ö´Â ÃʱâÈ­ µÇ¾î ÀÖ¾î¾ß ÇÕ´Ï´Ù. ÇÏÁö¸¸, ¾îÂ÷ÇÇ ¸Þ¼­µå ³»¿¡¼­ ±× °ªÀ» ¹Ýµå½Ã ¼öÁ¤ÇÏ·Á°í ÇÑ´Ù¸é ±»ÀÌ ¿ÜºÎ¿¡¼­ ÃʱâÈ­ÇÒ Çʿ䰡 ¾øÁö ¾ÊÀ»±î¿ä? Áï, x1ÀÇ ÃʱⰪÀÌ ¹«¾ùÀ̵ç Ç×»ó ±× °ªÀº 10000À¸·Î ¹Ù²ï´Ù¸é, x1À» ÃʱâÈ­Çϴµ¥ º° Àǹ̰¡ ¾ø´Ù´Â °ÍÀÌÁÒ. ¹Ù·Î ÀÌ·¯ÇÑ °æ¿ì¸¦ À§Çؼ­ C#¿¡¼­ Á¦°øÇÏ´Â °ÍÀÌ out Ű¿öµå¸¦ Á¦°øÇÕ´Ï´Ù.

 

¢Ã out Ű¿öµå

q                ÂüÁ¶¿¡ ÀÇÇÑ Àü´ÞÀ» ÇÒ ¶§ »ç¿ëÇϴ Ű¿öµå

q                ÂüÁ¶·Î °ªÀ» ³Ñ±æ ¶§ ÂüÁ¶ÇÒ ´ë»óÀº ÃʱâÈ­ÇÒ ÇÊ¿ä´Â ¾ø´Ù.

 

out Ű¿öµå¸¦ »ç¿ëÇϸé, À§¿Í °°Àº »óȲ¿¡¼­ È£ÃâÇÏ´Â ÂÊÀÇ Àμö¸¦ ÃʱâÈ­ÇÒ Çʿ䰡 ¾ø´Ù´Â °ÍÀÔ´Ï´Ù. À̰ÍÀ» ´Ù¸¥ ¸»·Î Çϸé, ÃʱâÈ­ÀÇ °úÁ¤¿¡¼­ »ý±â´Â ¾µµ¥¾ø´Â ¸Þ¸ð¸®ÀÇ ³¶ºñ¸¦ ¸·À» ¼ö ÀÖÀ¸¸ç ÀÛ¾÷À» ´Ü¼øÈ­ ½Ãų ¼ö ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. out Ű¿öµå¸¦ ÀÌ¿ëÇÑ ÂüÁ¶¿¹Á¦¿Í ref Ű¿öµå¸¦ ÀÌ¿ëÇÑ ÂüÁ¶¿¹Á¦¸¦ ÇÔ²² ºñ±³ÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.

 

&

TestRef1.cs

Ü ref·Î È£ÃâÇÒ ¶§ ¿¡·¯°¡ ¹ß»ýÇÏ´Â ¿¹Á¦

using System;

class TestRef1{

                           static void CallByRef(ref int x) {

                                                     x = 10000;

                           }

                           public static void Main() {

                                                     int x1; //ÃʱâÈ­ ÇÏÁö ¾Ê¾ÒÀ½

                                                     CallByRef(ref x1);

                                                     Console.WriteLine("Call-By-Reference: {0}", x1);

                           }

}

C:\C#Example\02>csc TestRef1.cs

TEstRef1.cs(8,17): error CS0165: ÇÒ´çµÇÁö ¾ÊÀº 'x1' Áö¿ª º¯¼ö¸¦ »ç¿ëÇß½À´Ï´Ù.

 

¾Õ¿¡¼­ »ç¿ëÇß´ø TestRef Ŭ·¡½º¸¦ Çѱºµ¥¸¸ °íÄ¡°í ±×´ë·Î »ç¿ëÇß½À´Ï´Ù. ±×¸®°í ÀÌ ¿¹Á¦´Â ¿¡·¯°¡ ¹ß»ýÇÔÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

n                 int x1;

 

intÇüÀÇ º¯¼ö x1À» ¼±¾ðÇϰí ÃʱâÈ­´Â ½ÃÄÑ ³õÁö ¾Ê¾Ò±â ¶§¹®¿¡ ÄÄÆÄÀÏÀ» Çϸé, ¡®TestRef1.cs(8,17): error CS0165: ÇÒ´çµÇÁö ¾ÊÀº 'x1' Áö¿ª º¯¼ö¸¦ »ç¿ëÇß½À´Ï´Ù.¡¯ ¶ó´Â ¿¡·¯¸¦ ¹ß»ý½Ãŵ´Ï´Ù. ±×·³ À̰ÍÀ» out Ű¿öµå¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ýÀ¸·Î ½ÇÇàÇØº¸°Ú½À´Ï´Ù.

 

&

TestOut.cs

Ü outÀ¸·Î È£ÃâÇÏ´Â ¿¹Á¦

using System;

class TestOut{

                           static void CallByRef(out int x) {

                                                     x = 10000;

                           }

                           public static void Main() {

                                                     int x1;

                                                     CallByRef(out x1);

                                                     Console.WriteLine("Call-By-Out: {0}", x1);

                           }

}

C:\C#Example\02>TestOut

C:\C#Example\02>TestOut

Call-By-Out: 10000

 

¼Ò½º¸¦ º¸½Ã¸é À§ TestRef1.cs¿¹Á¦¿¡¼­ ´ÜÁö ref Ű¿öµå¸¦ outÀ¸·Î ¹Ù²Ù¾î ÁØ °ÍÀ» È®ÀÎ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î ÇØ¼­ ¿¡·¯°¡ ³ªÁö ¾Ê´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ¿Í °°ÀÌ ¸Þ¼­µå¸¦ È£ÃâÇϱâ ÀÌÀü¿¡, ºÒ·¯¿Ã ŸÀÔÀÇ º¯¼ö³ª ÀνºÅϽº¸¦ »ç¿ëÇÒ Çʿ䰡 ¾ø´Ù¸é, ±×°ÍÀÇ ÃʱâÈ­¸¦ »ý·«ÇÏ´Â °ÍÀÌ ¸Þ¸ð¸® °ü¸® Â÷¿ø¿¡¼­ º¸´Ù È¿À²ÀûÀÏ °ÍÀÔ´Ï´Ù.

 

¢Ã ref ¿Í out Ű¿öµå

q                ref : ÂüÁ¶ÇÒ º¯¼ö´Â ¹Ýµå½Ã ÃʱâÈ­ µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù.

q                out : ÂüÁ¶ÇÒ º¯¼ö°¡ ¹Ýµå½Ã ÃʱâÈ­ µÉ ÇÊ¿ä´Â ¾ø´Ù.

 

»ç½Ç ref¿Í out Ű¿öµå´Â º°´Ù¸¥ Â÷À̰¡ ¾ø½À´Ï´Ù. µÑÀº ¾Æ¸¶ »çÃÌ Á¤µµ µÉ °ÍÀÔ´Ï´Ù. ÃʱâÈ­¸¦ ÇØÁÖ´À³Ä ÇØÁÖÁö ¾Ê´À³ÄÀÇ Â÷À̸¸ ÀÖÀ» »Ó ÂüÁ¶¶ó´Â Ãø¸é¿¡¼­´Â µ¿ÀÏÇÕ´Ï´Ù. out Ű¿öµå¿Í ref Ű¿öµå¸¦ »ç¿ëÇÏ´Â ¹æ½ÄÀ» Àß ±¸º°ÇϽñ⠹ٶø´Ï´Ù.



jabookÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°ÀºC# Á¦2°­ÀÇ
ÀúÀÚ:ÃÖ¿µ°ü