¼Ò¼³°°ÀºC#  Á¦4°­ÀÇ C#ÀÇ °´Ã¼ÁöÇâ  02. ¿¬»êÀÚ ¿À¹ö·Îµù  

 

 

4.2 ¿¬»êÀÚ ¿À¹ö·Îµù

 

¿À¹ö·Îµù(¸Þ¼­µå Áߺ¹Á¤ÀÇ)¿¡ °üÇØ¼­´Â ¾Õ¿¡¼­ ¼³¸íÀ» Çß½À´Ï´Ù. ¿À¹ö·Îµù(Overloading)À̶õ °°Àº À̸§À¸·Î ¿©·¯ °³ÀÇ ¸Þ¼­µå¸¦ »ç¿ëÇÏ´Â °ÍÀ̾úÁÒ. ±×¸®°í ¾Õ Àý¿¡¼­´Â ¸Þ¼­µå ¿À¹ö·ÎµùÀÔ´Ï´Ù. ±×·±µ¥ À̹ø¿¡´Â ¿¬»êÀÚ ¿À¹ö·Îµù(Operator Overloading)ÀÔ´Ï´Ù. ¸» ±×´ë·Î ¿¬»êÀÚ¸¦ Áߺ¹Çؼ­ Á¤ÀÇÇÏ´Â °ÍÀÔ´Ï´Ù. ÀϹÝÀûÀÎ ¿¬»êÀÚ¸¦ »ý°¢ÇÏ¸é ´õÇϱ⠻©±â µîÀÇ °ª¿¡ ´ëÇÑ ¿¬»êÀ» »ý°¢ÇÏ´Â °ÍÀÌ ÀϹÝÀûÀÔ´Ï´Ù. ÇÏÁö¸¸ ÀÌ·¯ÇÑ ¿¬»êÀÚ¸¦ °´Ã¼µé »çÀÌÀÇ ¿¬»êÀ¸·Î ÇÑ Â÷¿ø ³ô¿© ÁÖ´Â °ÍÀÌ ¿¬»êÀÚ ¿À¹ö·Îµù(Operator Overloading)ÀÔ´Ï´Ù.

 

¼ö ¿¬»êÀº ´Ü¼øÇÑ °è»êÀÌÁö¸¸ °´Ã¼µé³¢¸®ÀÇ ¿¬»êÀº ´õ º¹ÀâÇÑ ÀýÂ÷¸¦ °ÅÃÄ¾ß Çϱ⠶§¹®¿¡ ÀÌ·¯ÇÑ ¿¬»êÀÇ ÀýÂ÷¸¦ ÇÁ·Î±×·¥ ÇÑ´Ù°í »ý°¢ÇÏ½Ã¸é µË´Ï´Ù.

 

¢Ã ¿¬»êÀÚ ¿À¹ö·Îµù(Operator Overloading)

q                ¿¬»êÀÚ¸¦ Áߺ¹ Á¤ÀÇÇÏ´Â °Í

 

¿¬»êÀÚ ¿À¹ö·ÎµùÀº ÀÏ¹Ý ¸Þ¼­µåÀÇ ¿À¹ö·Îµù°ú Â÷ÀÌÁ¡Àº º°·Î ¾ø½À´Ï´Ù. ´ÜÁö ¸Þ¼­µå°¡ ¾Æ´Ñ ¿¬»êÀÚ ÀÚü¸¦ ¿À¹ö·Îµù ÇÏ´Â °ÍÀ¸·Î »ý°¢ÇÏ½Ã¸é µË´Ï´Ù. Áï, ¸Þ¼­µå À̸§´ë½Å¿¡ operator + °¡ »ç¿ëµÇ¾ú´Ù°í »ý°¢ÇÏ½Ã¸é ÆíÇϰڱº¿ä.

 

¿¹Á¦¿¡¼­ + ¿¬»êÀÚ¸¦ Á¤ÀÇÇÏ¿´±â ¶§¹®¿¡ + ¿¬»êÀÚ¸¦ ¾Ë¸ÂÀº ¸Å°³º¯¼ö¿Í °°ÀÌ »ç¿ëÇÏ¸é ¿¬»êÀÌ µÇ´Â °ÍÀÔ´Ï´Ù. ÇÏÁö¸¸ ±âº» µ¥ÀÌÅÍŸÀÔ°ú ±âº» µ¥ÀÌÅÍŸÀÔÀÇ +´Â ¿À¹ö·Îµù¿¡ ¿µÇâÀ» ¹ÌÄ¡Áö ¸øÇÕ´Ï´Ù.

 

ÀÌ ¿¬»êÀÚ ¿À¹ö·ÎµùÀº ¸·°­ÇÑ ÈûÀ» ¹ßÈÖÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ±×¿¡ ¹ÝÇØ¼­ ´ÜÁ¡µµ ÀÖ´Â °ÍÀÌ »ç½ÇÀÔ´Ï´Ù. ±×·³ ¿¹Á¦¸¦ º¸¸é¼­ »ç¿ë¹ý°ú ÀåÁ¡, ±×¸®°í ´ÜÁ¡¿¡ ´ëÇØ¼­µµ ¾Ë¾Æº¸°Ú½À´Ï´Ù.

 

OperOverloadTest.cs

¿¬»êÀÚ ¿À¹ö·ÎµùÀ» Å×½ºÆ®ÇÏ´Â ¿¹Á¦

using System;

class OperOverloadTest {

         public int a = 0;

         public int b = 0;

         public OperOverloadTest(int a, int b){

                  this.a = a;

                  this.b = b;

         }

         public static OperOverloadTest operator +(OperOverloadTest oot1, OperOverloadTest oot2){

                  int resultA = oot1.a + oot2.a;

                  int resultB = oot1.b + oot2.b;

                  OperOverloadTest result = new OperOverloadTest(resultA, resultB);

                  return result;

         }

};//class

class OperOverloadTestMain {

         public static void Main() {

                  OperOverloadTest oot1 = new OperOverloadTest(3, 5);

                  OperOverloadTest oot2 = new OperOverloadTest(7, 16);

                  OperOverloadTest result = oot1+oot2;

                        Console.WriteLine("a°ªÀÇ ÇÕÀº "+result.a+"ÀÔ´Ï´Ù.");

                        Console.WriteLine("b°ªÀÇ ÇÕÀº "+result.b+"ÀÔ´Ï´Ù.");                                        

         }//Main

};//class

C:\C#Example\04>csc OperOverloadTest.cs

C:\C#Example\04>OperOverloadTest

a°ªÀÇ ÇÕÀº 10ÀÔ´Ï´Ù.

b°ªÀÇ ÇÕÀº 21ÀÔ´Ï´Ù.

 

¿¹Á¦¸¦ Àß º¸¸é ¾î·ÆÁö´Â ¾Ê½À´Ï´Ù. °£´ÜÇÑ ¿¹Á¦¶ó ±×·²Áöµµ ¸ð¸£°Ú½À´Ï´Ù¸¸ Àû¿ëÇÏ´Â ¹ýÀº »õ·Î¿î ¸Þ¼­µå¸¦ Á¤ÀÇÇÑ´Ù´Â ±âºÐÀ» °®°í »ç¿ëÇÏ¸é µË´Ï´Ù. ¾ÕÀÇ ¿¹Á¦µµ + ¿¬»êÀÚ¸¦ Áߺ¹ Á¤ÀÇÇÏ¿´Áö¸¸ À̰ÍÀÌ ¸¶À½¿¡ µéÁö ¾ÊÀ¸½Ã¸é »õ·Î¿î ¸Þ¼­µå¸¦ ¸¸µé¾î¼­ »ç¿ëÇØµµ µË´Ï´Ù.

 

´ÜÇ× ¿¬»êÀÚ ¿À¹ö·Îµù

public static return_type operator op(¸Å°³º¯¼ö_ŸÀÔ  ¸Å°³º¯¼ö){.

         ¿¬»ê ³»¿ë

}

 

ÀÌÇ× ¿¬»êÀÚ ¿À¹ö·Îµù

public static return_type operator op(¸Å°³º¯¼ö_ŸÀÔ ¸Å°³º¯¼ö, ¸Å°³º¯¼ö_ŸÀÔ ¸Å°³º¯¼ö){

¿¬»ê ³»¿ë

}

 

¿¬»êÀÚ ¿À¹ö·ÎµùÀº À§ÀÇ Çü½Ä¿¡ ¸ÂÃ߾ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. return-typeÀº ¹ÝȯÇüÀ» °¡¸®Å°°í, op´Â »õ·Ó°Ô Á¤ÀÇµÉ ¿¬»êÀÚ¸¦ ¸»ÇÕ´Ï´Ù. ¿¹Á¦¿¡¼­ return-typeÀº OperOverloadTest À̰í, op´Â +¿´½À´Ï´Ù. ±×·¡¼­ operator+ ÀÚü¸¦ ¸Þ¼­µå À̸§À¸·Î º¸½Ã¸é ¸Þ¼­µå¿Í º° ´Ù¸¦ °ÍÀÌ ÀÖ½À´Ï´Ù. ´ÜÁö ¿¬»êÀÌ ÀÌ·ç¾îÁú ¶§ÀÇ ¸Å°³º¯¼ö´Â + ¿¬»êÀÚ¸¦ »ç¿ëÇÒ ¶§ + ¿¬»êÀÚÀÇ ¿ÞÂʰú ¿À¸¥ÂÊ¿¡ ÀÖ´Â °ÍÀÌ ¸Å°³º¯¼ö°¡ µÈ´Ù´Â °Í¿¡¸¸ ÁÖÀÇ ÇÏ½Ã¸é µË´Ï´Ù. ¿¬»êÀÚ ¿À¹ö·Îµù¿¡ »ç¿ëµÈ ¸Þ¼­µåÀÇ ¼±¾ðºÎ¸¦ ´Ù½Ã Çѹø È®ÀÎ ÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.

 

n                 public static OperOverloadTest operator+(OperOverloadTest oot1, OperOverloadTest oot2)

 

¢Ã ¿¬»êÀÚ ¿À¹ö·Îµù(Overloading)¿¡¼­ ÁÖÀÇ ÇØ¾ß ÇÏ´Â »ç¿ë

q                ¹«Á¶°Ç public

q                ¹«Á¶°Ç static

q                ¹ÝȯÇüÀº ¸¶À½´ë·Î

 

ÀÌ·¸°Ô ¿À¹ö·Îµù µÈ ¿¬»êÀÚ ¿À¹ö·Îµù ¸Þ¼­µå´Â ´ÙÀ½°ú °°Àº ±¸¹®¿¡¼­ È£Ã⠵ǾîÁ®¼­ »ç¿ëµË´Ï´Ù.

 

n                  OperOverloadTest result = oot1+oot2;

 

¿¬»êÀÚ ¿À¹ö·ÎµùÀÇ °æ¿ì ´ÜÇ× ¿¬»êÀÚÀÎ °æ¿ì¿Í ÀÌÇ× ¿¬»êÀÚÀÎ °æ¿ì, 3Ç× ¿¬»êÀÚÀÎ °æ¿ì¸¦ ±¸º°ÇØ¾ß ÇÕ´Ï´Ù. ¶Ç ¸ðµç ¿¬»êÀÚ°¡ ¿À¹ö·Îµù µÇ´Â °ÍÀÌ ¾Æ´Õ´Ï´Ù. ±×·³ ¿À¹ö·ÎµùÀÌ °¡´ÉÇÑ ¿¬»êÀÚ¸¦ ¾Ë¾Æº¸°Ú½À´Ï´Ù.

 

¿¬»êÀÚ

¿À¹ö·Îµù °¡´É ¿©ºÎ

+, -, !, ~, ++, true, false

´ÜÇ× ¿¬»êÀÚ´Â ¿À¹ö·Îµù °¡´É

+, -, *, /, %, &, |, <<, >>, ^

ÀÌÁø ¿¬»êÀÚ´Â ¿À¹ö·Îµù °¡´É

==, !=, <, >, <=, >=

ºñ±³ ¿¬»êÀÚ´Â ¿À¹ö·Îµù °¡´É

´Ü, ÇϳªÀÇ ¿¬»êÀÚ¸¦ ¿À¹ö·Îµù Çϸé ¦ÀÌ µÇ´Â ¿¬»êÀÚµµ ¿À¹ö·Îµù ÇØ¾ß ÇÔ

 

¿À¹ö·ÎµùÀÌ ºÒ°¡´ÉÇÑ ¿¬»êÀÚ´Â À§ÀÇ °ÍÀ» Á¦¿ÜÇÏ¸é µÇ°ÚÁö¿ä. ±×·¡µµ Çѹø »ý°¢³ª´Â ´ë·Î Á¤¸®Çغ¼±î¿ä?

 

¿¬»êÀÚ ¿À¹ö·ÎµùÀÌ ºÒ°¡´ÉÇÑ ¿¬»êÀÚ

?  .  =  is  new  sizeof  typeof

||  []  ()  &&  ->  +=  -=  µîµî

? :  

 

¿¬»êÀÚ ¿À¹ö·ÎµùÀº Àß »ç¿ëÇÏ¸é ¾öû³­ ÈûÀ» ¹ßÈÖÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ¿¬»êÀÚ¸¦ ¾û¶×ÇÏ°Ô Á¤ÀÇÇØ ³õ°í »ç¿ëÇÏ¸é ´Ù¸¥ »ç¿ëÀÚµéÀÌ È¥¶õÀ» °¡Á®¿Ã ¼ö ÀÖÀ¸¹Ç·Î Àß »ý°¢ÇÏ¿© »ç¿ëÇØ¾ß ÇÕ´Ï´Ù.



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