7-3.¿¬»êÀÚ

7-3-1.¿¬»êÀÚ ¿À¹ö·Îµù

¿¬»êÀÚ´Â ÇÇ¿¬»êÀÚ¸¦ Àμö·Î ÃëÇÏ°í °è»ê °á°ú¸¦ ¸®ÅÏÇÑ´Ù´Â Á¡¿¡¼­ ÇÔ¼ö¿Í À¯»çÇÏ´Ù. ´Ù¸¸ ÇÇ¿¬»êÀÚ °³¼ö°¡ Á¤ÇØÁ® ÀÖ°í À̸§ÀÌ ¾Æ´Ñ ±âÈ£·Î È£ÃâÇÑ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. ¿¬»êÀÚ ¿À¹ö·ÎµùÀº ¿ø·¡ÀÇ ¿¬»êÀÚ ÇÔ¼ö¸¦ Ŭ·¡½º ŸÀÔ¿¡ ´ëÇØ Áߺ¹ Á¤ÀÇÇÏ¿© °´Ã¼¿¡ ´ëÇÑ ¿¬»êÀ» Á¤ÀÇÇÏ´Â ±â¹ýÀÌ´Ù. ¿À¹ö·ÎµùÀº ÀμöÀÇ Å¸ÀÔÀÌ ´Ù¸¦ ¶§ ¼º¸³Çϴµ¥ ¿¬»êÀÚ´Â ÇÇ¿¬»êÀÚ°¡ Àμö¿©¼­ ÇÇ¿¬»êÀÚº°·Î Á¤ÀÇÇÒ ¼ö ÀÖ´Ù. ±âº» ŸÀÔ¿¡ ´ëÇÑ ¿¬»êÀÚ´Â °¢ ŸÀÔ¿¡ ´ëÇØ ÀÌ¹Ì ¿À¹ö·ÎµùµÇ¾î ÀÖ´Ù. ±×·¡¼­ ´ÙÀ½°ú °°Àº ¿¬»êÀÌ ÀÚ¿¬½º·´°Ô ¼º¸³ÇÑ´Ù.

 

¿¬»ê½Ä

¿¬»êÀÚ ÇÔ¼ö

1 + 2

int +(int a, int b)

3.14 + 2.54

double +(double a, double b)

"Çϳª" + "µÑ"

string +(string a, string b)

 

Á¤¼ö¿Í ½Ç¼ö, ¹®ÀÚ¿­Àº ³»ºÎÀûÀÎ ±¸Á¶°¡ ´Ù¸£¸ç + ¿¬»ê ¾Ë°í¸®Áòµµ ´ç¿¬È÷ ´Ù¸£´Ù. ¶È°°Àº + ¿¬»êÀ¸·Î Á¤¼ö, ½Ç¼ö, ¹®ÀÚ¿­À» ´õÇÒ ¼ö ÀÖ´Â ÀÌÀ¯´Â + ¿¬»êÀÚ°¡ °¢ ŸÀÔ¿¡ ´ëÇØ Áߺ¹ Á¤ÀǵǾî Àֱ⠶§¹®ÀÌ´Ù. + ¿¬»êÀÚÀÇ ¿øÇüÀ» ÇÔ¼öÀÇ ÇüÅ·ΠÀÛ¼ºÇØ º¸¸é À§ ¿À¸¥ÂÊ°ú °°´Ù.

°¢ ¿¬»êÀÚÀÇ ³»ºÎ ÄÚµå´Â ´Ù¸£Áö¸¸ ÇÇ¿¬»êÀÚ Å¸ÀÔ¿¡ µû¶ó ÀûÀýÇÑ ¸Þ¼­µå°¡ È£ÃâµÇ¾î +¶ó´Â ÇϳªÀÇ ¿¬»êÀÚ·Î Á¤¼ö¸¦ ´õÇÏ°í ¹®ÀÚ¿­À» ¿¬°áÇÏ´Â µ¿ÀÛÀÌ ¸ðµÎ °¡´ÉÇÏ´Ù. ±×·¯³ª ¹è¿­³¢¸® ´õÇϰųª °´Ã¼³¢¸® ´õÇÏ´Â + ¿¬»êÀÚ´Â Á¤ÀǵǾî ÀÖÁö ¾Ê¾Æ ´ÙÀ½ ¿¬»ê½ÄÀº ÄÄÆÄÀϵÇÁö ¾Ê´Â´Ù.

 

Time A, B, C;

C = A + B;

 

+ ¿¬»êÀÚ´Â Time Ŭ·¡½ºÀÇ ³»ºÎ¸¦ ¸ð¸£¸ç ¾î¶»°Ô ´õÇÏ´ÂÁöµµ ´ç¿¬È÷ ¸ð¸¥´Ù. TimeÇü °´Ã¼³¢¸® ´õÇÏ·Á¸é TimeÀ» ÇÇ¿¬»êÀÚ·Î ¹Þ´Â + ¿¬»êÀÚ¸¦ »õ·Î Á¤ÀÇÇØ¾ß ÇÑ´Ù. TimeÀº »ç¿ëÀÚ°¡ Á¤ÀÇÇÑ Æ¯¼öÇÑ Å¸ÀÔÀ̹ǷΠ¾î¶»°Ô ´õÇÏ´ÂÁöµµ »ç¿ëÀÚ°¡ Á¤ÀÇÇØ¾ß ÇÑ´Ù.

¿¬»êÀÚ ´ë½Å AddTime°°Àº ¸Þ¼­µå¸¦ Á¤ÀÇÇÒ ¼öµµ ÀÖÁö¸¸ ¿¬»êÀڴ ǥ±â°¡ °£ÆíÇÏ°í Á÷°üÀûÀÌ´Ù. AddTime(A, B)º¸´Ù´Â A + B°¡ »ó½ÄÀûÀÌ°í ÀÔ·ÂÇϱ⠽¬¿ì¸ç °¡µ¶¼ºµµ ³ô´Ù. ¿¬»êÀÚ³ª ¸Þ¼­µå³ª ¿¬¼âÀûÀÎ ¿¬»êÀÌ °¡´ÉÇÏ´Ù. ´ÙÀ½Àº 4°³ÀÇ ½Ã°£ °´Ã¼¸¦ ´õÇÏ´Â ¿¹Àε¥ ¾î´ÀÂÊÀÌ ´õ ½¬¿îÁö ¸í¹éÇÏ´Ù.

 

E = AddTime(A, AddTime(B,AddTime(C, D)))

E = A + B + C + D;

 

¿©·¯ ¿¬»êÀÌ ¼¯¿© ÀÖÀ» ¶§´Â Â÷ÀÌ°¡ ´õ ¹ú¾îÁø´Ù. °Ô´Ù°¡ ¿¬»êÀÚ´Â ¿ì¼±¼øÀ§¿Í °áÇÕ¼ø¼­ÀÇ °³³äÀÌ ÀÖ¾î °ýÈ£¸¦ ¾²Áö ¾Ê¾Æµµ ¼ø¼­°¡ ºÐ¸íÇÏ´Ù. A + B * C / D + E °°Àº ½ÄÀ» ¸Þ¼­µå·Î ¼öÇàÇÏÀÚ¸é ²Ï ÁöÀúºÐÇØÁø´Ù. ¿¬»êÀÚ°¡ ÇÒ ¼ö ÀÖ´Â ¸ðµç ÀÏÀº ¸Þ¼­µåµµ ÇÒ ¼ö ÀÖÀ¸¸ç ¼Óµµ³ª Å©±âÂ÷µµ °ÅÀÇ ¾ø´Ù. ±»ÀÌ ¿¬»êÀÚ¸¦ Á¤ÀÇÇÏ´Â ÀÌÀ¯´Â º¸±â ÁÁ°í Æí¸®ÇÏ¸ç »ý»ê¼ºÀÌ ³ô±â ¶§¹®ÀÌ´Ù.

¿¬»êÀÚ ÇÔ¼öÀÇ À̸§Àº operator XÀ̸ç X ÀÚ¸®¿¡ ¿À¹ö·ÎµùÇÒ ¿¬»êÀÚ°¡ ¿Â´Ù. ¿¹¸¦ µé¾î + ¿¬»êÀÚ¸¦ Á¤ÀÇÇÏ°í ½ÍÀ¸¸é operator + À̸§À¸·Î ¸Þ¼­µå¸¦ ¸¸µç´Ù. ¿¬»êÀÚ ±âÈ£¸¦ ¸íĪÀ¸·Î ¾µ ¼ö ¾ø¾î operator Å°¿öµå¸¦ ºÙ¿© À̸§À» ÀÛ¼ºÇÑ´Ù. ¿À¹ö·Îµù °¡´ÉÇÑ ¿¬»êÀÚ ¸ñ·ÏÀº ´ÙÀ½°ú °°´Ù.

 

Á¾·ù

¿¬»êÀÚ

»ê¼ú

+ - * / %

ºÎÈ£

+ -

Áõ°¨

++, --

ºñÆ®

& | ^ << >> ~

ºñ±³

== != > < >= <= !

 

¸ðµç ¿¬»êÀÚ¸¦ ´Ù ¿À¹ö·ÎµùÇÒ ¼ö ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù. ´ëÇ¥ÀûÀ¸·Î = ¿¬»êÀÚ´Â ³Ê¹« ±âº»ÀûÀÎ ¿¬»êÀ̶ó ¿À¹ö·ÎµùÇÒ ¼ö ¾ø´Ù. [ ] ¿¬»êÀÚ´Â Àε¦¼­·Î ´ë½Å Á¤ÀÇÇÒ ¼ö ÀÖ¾î ¿À¹ö·Îµù ´ë»óÀÌ ¾Æ´Ï¸ç &&, || ¿¬»êÀÚ´Â ¼îÆ® ¼­Å°Æ® ±â´É¿¡ ÀÇÇÑ ¹Î°¨ÇÑ ºÎÀÛ¿ëÀÌ ÀÖ¾î ¿À¹ö·ÎµùÀÌ ±ÝÁöµÇ¾î ÀÖ´Ù. ±×·³ ÀÌ·ÐÀº ÀÌÂë¿¡¼­ Á¢¾îµÎ°í ¿¬»êÀÚ ¿À¹ö·ÎµùÀ» Á÷Á¢ ÇØ º¸ÀÚ. ´ÙÀ½ ¿¹Á¦´Â Time °´Ã¼³¢¸® ´õÇÏ´Â + ¿¬»êÀÚ¸¦ Á¤ÀÇÇÏ¿© ½Ã°£³¢¸® ´õÇÑ´Ù.

 

TimePlus

using System;

 

class Time {

     private int hour, min, sec;

     public Time() { }

     public Time(int h, int m, int s) { hour = h; min = m; sec = s; }

     public void OutTime() {

          Console.WriteLine($"{hour}½Ã {min}ºÐ {sec}ÃÊ");

     }

     public static Time operator +(Time A, Time B) {

          Time T = new Time();

          T.hour = A.hour + B.hour;

          T.min = A.min + B.min;

          T.sec = A.sec + B.sec;

 

          T.min += T.sec / 60;

          T.sec %= 60;

          T.hour += T.min / 60;

          T.min %= 60;

          return T;

     }

}

 

class CSTest {

     static void Main() {

          Time A = new Time(1, 1, 1);

          Time B = new Time(2, 2, 2);

          Time C;

          C = A + B;

          C.OutTime();

     }

}

½ÇÇà°á°ú

3½Ã 3ºÐ 3ÃÊ

 

operator +¸Þ¼­µå°¡ Time °´Ã¼³¢¸® ´õÇÏ´Â ¿¬»êÀÚÀÌ´Ù. ¿ÜºÎ¿¡¼­ È£ÃâÇÏ·Á¸é publicÀ¸·Î ¼±¾ðÇØ¾ß ÇÑ´Ù. ¶Ç ±³È¯ ¹ýÄ¢À» Àû¿ëÇÏ·Á¸é È£Ãâ °´Ã¼¿¡ »ó°ü¾øÀÌ ¿¬»êÇÒ ¼ö ÀÖµµ·Ï staticÀ̾î¾ß ÇÑ´Ù. + ¿¬»êÀÚ´Â ÀÌÇ× ¿¬»êÀÚÀ̹ǷΠÀμöµµ ²À µÎ °³ ÀÖ¾î¾ß ÇÑ´Ù.

operator +ÀÇ º»Ã¼´Â ÇÇ¿¬»êÀÚÀÇ ¿ø·¡°ªÀ» À¯ÁöÇϱâ À§ÇØ Àӽà °´Ã¼¸¦ »ý¼ºÇÏ°í Àμö·Î Àü´Þ¹ÞÀº A¿Í BÀÇ °¢ ½Ã°£ ¿ä¼Ò¸¦ ´õÇÑ´Ù. À̶§ °¢ ¿ä¼ÒÀÇ ÀÚ¸® ³ÑħÀ» ó¸®Çϴµ¥ Ãʸ¦ ´õÇÑ °á°ú°¡ 60ÀÌ ³ÑÀ¸¸é ºÐÀ» Áõ°¡½ÃÅ°¸ç ºÐÀ» ´õÇÑ °á°ú°¡ 60 ÀÌ»óÀÌ¸é ½Ã¸¦ Áõ°¡½ÃŲ´Ù. 1:1:40ÃÊ¿Í 2:2:36Ãʸ¦ ´õÇϸé 3:3:76ÃÊ°¡ µÇ´Â °ÍÀÌ ¾Æ´Ï¶ó 3:4:16ÃÊ°¡ µÈ´Ù.

½Ã°£³¢¸® ´õÇÏ´Â ¿¬»êÀº ¼öÄ¡Çü³¢¸® ´õÇÏ´Â °Í°ú´Â ´Þ¸® Ư¼öÇÑ Ã³¸®°¡ ÇÊ¿äÇØ ¿¬»êÀÚ¸¦ µû·Î Á¤ÀÇÇØ¾ß ÇÑ´Ù. MainÀº C = A + B ¿¬»ê½ÄÀ¸·Î µÎ °´Ã¼¸¦ ´õÇÑ´Ù. ÀÌ È£Ãâ¿¡ ÀÇÇØ operator +(A, B)°¡ È£ÃâµÇ°í Àӽà °´Ã¼ T¿¡ A¿Í BÀÇ °¢ ½Ã°£ ¿ä¼Ò³¢¸® ´õÇØ T¸¦ ¸®ÅÏÇÏ¸ç ±× °á°ú¸¦ C°¡ ´ëÀԹ޴´Ù. ÇÇ¿¬»êÀÚÀÇ °³¼ö¿¡´Â Á¦ÇÑÀÌ ÀÖÁö¸¸ ŸÀÔ¿¡´Â Á¦ÇÑÀÌ ¾ø¾î Time °´Ã¼¿Í Á¤¼ö¸¦ ´õÇÒ ¼öµµ ÀÖ´Ù. Á¤¼ö¸¦ ÃÊ·Î °£ÁÖÇÏ¿© ½Ã°£¿¡ ÁöÁ¤ÇÑ Ãʸ¦ ´õÇÏ¸é µÈ´Ù. ÀÌ ¿¬»êÀ» À§ÇØ Time°ú int¸¦ Àμö·Î ¹Þ´Â ¿¬»êÀÚ¸¦ Á¤ÀÇÇÑ´Ù.

 

TimePlusInt

using System;

 

class Time {

     private int hour, min, sec;

     public Time() { }

     public Time(int h, int m, int s) { hour = h; min = m; sec = s; }

     public void OutTime() {

          Console.WriteLine($"{hour}½Ã {min}ºÐ {sec}ÃÊ");

     }

     public static Time operator +(Time A, int s) {

          Time T = new Time();

          T.hour = A.hour;

          T.min = A.min;

          T.sec = A.sec;

          T.sec += s;

 

          T.min += T.sec / 60;

          T.sec %= 60;

          T.hour += T.min / 60;

          T.min %= 60;

          return T;

     }

     public static Time operator +(int s, Time A) {

          return A + s;

     }

}

 

class CSTest {

     static void Main() {

          Time A = new Time(1, 1, 1);

          A = A + 1;

          A.OutTime();

          A = 1 + A;

          A.OutTime();

          A += 2;

          A.OutTime();

     }

}

½ÇÇà°á°ú

1½Ã 1ºÐ 2ÃÊ

1½Ã 1ºÐ 3ÃÊ

1½Ã 1ºÐ 5ÃÊ

 

operator +(Time A, int s)´Â Áº¯ÀÇ A °´Ã¼¿Í ¿ìº¯ÀÇ Á¤¼ö s¸¦ ´õÇØ A¿¡ sÃʸ¸Å­ °æ°úÇÑ ½Ã°£À» °è»êÇÑ´Ù. Àӽà °´Ã¼ T¸¦ »ý¼ºÇÏ°í AÀÇ °ªÀ» ´ëÀÔ¹ÞÀº ÈÄ ÃÊ¿¡ s¸¦ ´õÇÏ°í ÀÚ¸® ³ÑħÀ» ó¸®ÇÑ´Ù. µ¡¼ÀÀº ±³È¯ ¹ýÄ¢ÀÌ ¼º¸³ÇØ ÇÇ¿¬»êÀÚÀÇ ¼ø¼­´Â Áß¿äÄ¡ ¾Ê´Ù. A + 1ÀÌ °¡´ÉÇϸé 1 + Aµµ ´ç¿¬È÷ °¡´ÉÇØ¾ß ÇÑ´Ù.

±×·¡¼­ Àμö ¼ø¼­¿¡ µû¶ó µÎ °³ÀÇ ÇÔ¼ö¸¦ ÀÛ¼ºÇ쵂 ³»ºÎ µ¿ÀÛÀº °°À¸´Ï ½ÇÁ¦ ¿¬»ê ÄÚµå´Â ÇÑÂÊ¿¡ ÀÛ¼ºÇÏ°í ³ª¸ÓÁö ÇÑÂÊÀº ÀμöÀÇ ¼ø¼­¸¸ ¹Ù²ã ÁÖ¸é µÈ´Ù. C#Àº += ¿¬»êÀ» +¿Í =ÀÇ Á¶ÇÕÀ¸·Î Ãë±ÞÇϱ⠶§¹®¿¡ + ¿¬»êÀÚ¸¦ Á¤ÀÇÇϸé +=µµ ÀÚµ¿À¸·Î Á¤ÀǵȴÙ. ±×·¯³ª +¸¦ Á¤ÀÇÇÑ´Ù°í Çؼ­ ++ÀÌ Á¤ÀǵǴ °ÍÀº ¾Æ´Ï´Ù. ++Àº ¾Æ¿¹ ´Ù¸¥ ¿¬»êÀÚ¿©¼­ µû·Î Á¤ÀÇÇØ¾ß ÇÑ´Ù.

7-3-2.¿¬»êÀÚ ¿À¹ö·ÎµùÀÇ ¿¹

´ÙÀ½Àº ºñ±³ ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇØ º¸ÀÚ. ÂüÁ¶ ŸÀÔ¿¡ ´ëÇÑ == ¿¬»êÀº ¹øÁö¸¸ ºñ±³Çϴµ¥ ¿À¹ö·ÎµùÇÏ¸é ½ÇÁ¦ ³»¿ëÀ» ºñ±³ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦´Â µÎ °³ÀÇ Time °´Ã¼°¡ °°Àº ½Ã°£À» °¡Áö´ÂÁö ºñ±³ÇÑ´Ù.

 

TimeEqual

using System;

 

class Time {

     private int hour, min, sec;

     public Time() { }

     public Time(int h, int m, int s) { hour = h; min = m; sec = s; }

     public void OutTime() {

          Console.WriteLine($"{hour}½Ã {min}ºÐ {sec}ÃÊ");

     }

     public static bool operator ==(Time A, Time B) {

          return (A.hour == B.hour && A.min == B.min && A.sec == B.sec);

     }

     public static bool operator !=(Time A, Time B) {

          return !(A == B);

     }

}

 

class CSTest {

     static void Main() {

          Time A = new Time(5, 5, 5);

          Time B = new Time(5, 5, 5);

          Time C = new Time(6, 6, 6);

          Console.WriteLine("A¿Í B´Â {0}", (A == B ? "°°´Ù" : "´Ù¸£´Ù"));

          Console.WriteLine("A¿Í C´Â {0}", (A == C ? "°°´Ù" : "´Ù¸£´Ù"));

     }

}

½ÇÇà°á°ú

A¿Í B´Â °°´Ù

A¿Í C´Â ´Ù¸£´Ù

 

== ¿¬»êÀÚ´Â µÎ ½Ã°£ÀÌ °°ÀºÁö º¸±â À§ÇØ ½Ã, ºÐ, ÃÊÀÇ ¸ðµç ¿ä¼Ò°¡ µ¿½Ã¿¡ ÀÏÄ¡ÇÏ´ÂÁö Á¡°ËÇÑ´Ù. A¿Í B´Â ¸ðµÎ 5½Ã 5ºÐ 5ÃÊÀ̹ǷΠ°°´Ù°í Æò°¡Çϸç A¿Í C´Â ´Ù¸¥ °ÍÀ¸·Î Æò°¡ÇÑ´Ù. ¿ø·¡ÀÇ == ¿¬»êÀº ¹øÁö¸¸ º¸±â ¶§¹®¿¡ ¿À¹ö·ÎµùÇÏÁö ¾ÊÀ¸¸é A¿Í Bµµ ´Ù¸¥ °ÍÀ¸·Î Æò°¡ÇÑ´Ù. ¹®ÀÚ¿­À» == ¿¬»êÀÚ·Î ºñ±³ÇÒ ¼ö ÀÖ´Â ÀÌÀ¯µµ string Ŭ·¡½º°¡ == ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇØ ³õ¾Ò±â ¶§¹®ÀÌ´Ù.

¿¬»êÀÚÀÇ ¸®ÅÏ Å¸ÀÔ¿¡ Á¦¾àÀº ¾øÁö¸¸ ºñ±³ ¿¬»êÀÚ´Â Á¶°Ç½Ä¿¡ ÁÖ·Î »ç¿ëµÇ¹Ç·Î ¹Ýµå½Ã bool ŸÀÔÀ» ¸®ÅÏÇØ¾ß ÇÑ´Ù. ¾ïÁö·Î ¸¸µé¸é ºñ±³ ¿¬»êÀÚ°¡ int³ª stringÀ» ¸®ÅÏÇÏ´Â °Íµµ °¡´ÉÇÏÁö¸¸ ÀÌ·¸°Ô ¸¸µç ºñ±³ ¿¬»êÀÚ´Â ±×¾ß ¸»·Î ½á¸ÔÀ» µ¥°¡ ¾ø´Ù.

ºñ±³ ¿¬»êÀÚ´Â ´ëÀÀµÇ´Â ¹Ý´ë ¿¬»êÀÚ¿Í Â¦À¸·Î ¿À¹ö·ÎµùÇØ¾ß ÇÑ´Ù. ==À» Á¤ÀÇÇßÀ¸¸é !=µµ °°ÀÌ Á¤ÀÇÇÏ´Â °ÍÀÌ Å¸´çÇÏ´Ù. == Àº ³»¿ëÀ» ºñ±³Çϴµ¥ !=Àº ¹øÁö¸¦ ºñ±³Çϸé ÀÏ°ü¼ºÀÌ ¾ø´Ù. A == B°¡ ÂüÀÏ ¶§ A != B´Â ´ç¿¬È÷ °ÅÁþÀÌ µÇ¾î¾ß ³í¸®ÀûÀ¸·Î ¾ÈÁ¤µÈ´Ù. ±×·¡¼­ ÄÄÆÄÀÏ·¯´Â == °ú !=À» °°ÀÌ Á¤ÀÇÇϵµ·Ï °­Á¦ÇÑ´Ù. == ÀÌ Á¤ÀǵǾî ÀÖÀ¸¸é !=À» Á¤ÀÇÇÏ´Â °ÍÀº ±²ÀåÈ÷ ½¬¿îµ¥ ´Ü¼øÈ÷ ==ÀÇ ¹Ý´ë°ªÀ» ¸®ÅÏÇÏ¸é µÈ´Ù. °°Àº ÀÌÀ¯·Î <¿Í >, ±×¸®°í <=¿Í >=µµ ¹Ýµå½Ã ¦À¸·Î ¿À¹ö·ÎµùÇÑ´Ù. ÀÌ¿Ü¿¡ Ä÷º¼Ç¿¡ ÀúÀåµÉ ¶§¸¦ À§ÇØ Equals, GetHashCode ¸Þ¼­µåµµ ¿À¹ö·ÎµùÇØ¾ß Çϳª ÀÌ ¿¹Á¦¿Í´Â Á÷Á¢ÀûÀÎ »ó°üÀÌ ¾ø¾î ¹«½ÃÇß´Ù.

´ÙÀ½Àº °ªÀ» 1¾¿ Áõ°¨½ÃÅ°´Â Áõ°¨ ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇØ º¸ÀÚ. ++ ¿¬»êÀº + 1°ú °°Àº ¿¬»êÀÌÁö¸¸ ÀÌ´Â ¼öÄ¡Çü¿¡¸¸ ÇØ´çµÇ¸ç °´Ã¼¿¡¼­´Â Àǹ̰¡ ¿ÏÀüÈ÷ ´Þ¶óÁú ¼öµµ ÀÖ´Ù. ++Àº Çϳª ´õ ´Ã¸°´Ù´Â ¶æÀε¥ "Çϳª"°¡ ¹«¾ùÀ» ÀǹÌÇÏ´ÂÁö´Â Ŭ·¡½º¸¶´Ù ´Ù¸£´Ù.

 

TimePlusPlus

using System;

 

class Time {

     private int hour, min, sec;

     public Time() { }

     public Time(int h, int m, int s) { hour = h; min = m; sec = s; }

     public void OutTime() {

          Console.WriteLine($"{hour}½Ã {min}ºÐ {sec}ÃÊ");

     }

     public static Time operator ++(Time A) {

          Time T = new Time();

          T.hour = A.hour;

          T.min = A.min;

          T.sec = A.sec;

 

          T.sec++;

          T.min += T.sec / 60;

          T.sec %= 60;

          T.hour += T.min / 60;

          T.min %= 60;

          return T;

     }

}

 

class CSTest {

     static void Main() {

          Time A = new Time(1, 1, 1);

          Time t1, t2;

          t1 = A++;

          t2 = ++A;

 

          t1.OutTime();

          t2.OutTime();

          A.OutTime();

     }

}

½ÇÇà°á°ú

ÇöÀç ½Ã°£Àº 1½Ã 1ºÐ 1ÃÊÀÌ´Ù.

ÇöÀç ½Ã°£Àº 1½Ã 1ºÐ 3ÃÊÀÌ´Ù.

ÇöÀç ½Ã°£Àº 1½Ã 1ºÐ 3ÃÊÀÌ´Ù.

 

++ ¿¬»êÀÚ´Â »çº»À» ¸¸µç ÈÄ Ãʸ¦ 1Áõ°¡½ÃÄÑ ±× »çº»À» ¸®ÅÏÇÑ´Ù. ºñ·Ï 1ÃÊ Áõ°¡½ÃÅ°´õ¶óµµ 9:59:59´Â ½Ã¿Í ºÐÀÌ ¿µÇâÀ» ¹ÞÀ» ¼ö ÀÖ¾î ÀÚ¸® ³ÑħÀº ¹Ýµå½Ã ó¸®ÇØ¾ß ÇÑ´Ù. ++ ¿¬»êÀÚ¿¡¼­ ÇÇ¿¬»êÀÚ¸¦ Á÷Á¢ Áõ°¡½ÃÅ°Áö ¾Ê°í »çº»À» »ç¿ëÇÏ´Â ÀÌÀ¯´Â ÈÄÀ§ÇüÀº ÇÇ¿¬»êÀÚ°¡ Áõ°¡µÇ±â ÀüÀÇ °ªÀ» °¡Áö°í ÀÖ¾î¾ß Çϱ⠶§¹®ÀÌ´Ù.

ÀüÀ§Çü°ú ÈÄÀ§ÇüÀ¸·Î °¢°¢ È£ÃâÇØ º¸¾Ò´Âµ¥ Àß µ¿ÀÛÇÑ´Ù. ÈÄÀ§Çü A++À» ´ëÀÔ¹ÞÀº t1Àº Áõ°¡Çϱâ ÀüÀÇ °ªÀ» °¡Áö¸ç ÀüÀ§Çü ++A¸¦ ´ëÀÔ¹ÞÀº t2´Â Áõ°¡ ÈÄÀÇ °ªÀ» °¡Áø´Ù. Áõ°¡½ÃÅ°´Â ¿¬»êÀÚ¸¸ Àß ÀÛ¼ºÇØ µÎ¸é Áõ°¡¿Í Æò°¡ ¼ø¼­´Â ÄÄÆÄÀÏ·¯°¡ ¾Ë¾Æ¼­ °áÁ¤ÇÑ´Ù.

7-3-3.ij½ºÆ® ¿¬»êÀÚ

ij½ºÆ® ¿¬»êÀÚ¸¦ ¿À¹ö·ÎµùÇϸé Ŭ·¡½º¸¦ ¸¸µç »ç¶÷ÀÌ º¯È¯ °ø½ÄÀ» Á÷Á¢ Á¦°øÇÏ¿© ´Ù¸¥ ŸÀÔ°úÀÇ º¯È¯ ¹æ¹ýÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù. ij½ºÆ® ¿¬»êÀÚ ÇÔ¼ö´Â ¼±¾ð Çü½ÄÀÌ ÀÏ¹Ý ¿¬»êÀÚ¿Í´Â ´Þ¸® Ư¼öÇÏ´Ù.

 

public static implicit(explicit) º¯È¯´ë»ó(Àμö)

 

ij½ºÆ® ¿¬»êÀÚ´Â ´ÜÇ× ¿¬»êÀÚÀ̹ǷΠÀμöµµ ¹Ýµå½Ã Çϳª¿©¾ß ÇÑ´Ù. ¾î¶² ŸÀÔÀ¸·Î ¹Ù²Ü °ÍÀΰ¡´Â ÇÔ¼öÀÇ À̸§À¸·Î ÁöÁ¤Çϴµ¥ ÀÌ À̸§Àº ¸®ÅÏ Å¸ÀÔ ÁöÁ¤À» °âÇÑ´Ù. Àμö·Î Àü´ÞµÈ ŸÀÔÀ» ¸®ÅϵǴ ŸÀÔÀ¸·Î º¯È¯ÇÑ´Ù°í »ý°¢ÇÏ¸é µÈ´Ù. implicit(¾Ï½ÃÀû), explicit(¸í½ÃÀû) Å°¿öµå´Â º¯È¯ ¹æ½ÄÀ» ÁöÁ¤ÇÑ´Ù. ¾Ï½ÃÀû º¯È¯À̶õ ÄÄÆÄÀÏ·¯ÀÇ ÀÚµ¿ º¯È¯ ¿¬»êÀÌ¸ç °ª ¼Õ½ÇÀÌ ¾øÀ» ¶§ »ç¿ëÇÑ´Ù. ¸í½ÃÀû º¯È¯Àº °ª ¼Õ½ÇÀÌ ¹ß»ýÇÒ °¡´É¼ºÀÌ ÀÖ¾î ij½ºÆÿ¡ ÀÇÇؼ­¸¸ º¯È¯ÇÒ ¼ö ÀÖ´Ù.

´ÙÀ½ ¿¹Á¦´Â ½Ã°£°ú Á¤¼ö¸¦ »óÈ£ º¯È¯ÇÑ´Ù. ½Ã°£Àº ½Ã, ºÐ, ÃÊ·Î ±¸¼ºµÇÁö¸¸ Àý´ëÃÊ ´ÜÀ§·Î Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. 2½Ã 10ºÐ 23ÃÊ´Â 2 * 3600 + 10 * 60 + 23 = 7823ÃÊ¿Í °°´Ù. ¹Ý´ë·Î Á¤¼ö¸¦ Àý´ëÃÊ·Î Çؼ®ÇÏ¿© Á¤¼ö°¡ ½Ã°£ °´Ã¼°¡ µÇ±âµµ ÇÑ´Ù. Àý´ëÃÊ´Â µÎ ½Ã°£ÀÇ °£°ÝÀ» °è»êÇÒ ¶§ ½Ç¿ëÀûÀÌ´Ù.

 

TimeInt

using System;

 

class Time {

     public int hour, min, sec;

     public Time() { }

     public Time(int h, int m, int s) { hour = h; min = m; sec = s; }

     public void OutTime() {

          Console.WriteLine($"ÇöÀç ½Ã°£Àº {hour}½Ã {min}ºÐ {sec}ÃÊÀÌ´Ù.");

     }

     public static implicit operator int(Time T) {

          return T.hour * 3600 + T.min * 60 + T.sec;

     }

     public static explicit operator Time(int abs) {

          Time T = new Time();

          T.hour = abs / 3600;

          T.min = (abs / 60) % 60;

          T.sec = abs % 60;

          return T;

     }

}

 

class CSTest {

     static void Main() {

          Time Now = new Time(12, 30, 40);

          Now.OutTime();

          int absec = Now;

          Console.WriteLine("Àý´ëÃÊ = {0}", absec);

          Time Then = new Time();

          Then = (Time)12345;

          Then.OutTime();

     }

}

½ÇÇà°á°ú

ÇöÀç ½Ã°£Àº 12½Ã 30ºÐ 40ÃÊÀÌ´Ù.

Àý´ëÃÊ = 45040

ÇöÀç ½Ã°£Àº 3½Ã 25ºÐ 45ÃÊÀÌ´Ù.

 

TimeÀ» int·Î º¯È¯ÇÏ´Â ¿¬»êÀÚ¿Í int¸¦ TimeÀ¸·Î º¯È¯ÇÏ´Â ¾ç¹æÇâÀÇ Ä³½ºÆ® ¿¬»êÀÚ¸¦ Á¤ÀÇÇß´Ù. ½Ã°£À» Á¤¼ö·Î ¹Ù²Ü ¶§´Â ½Ã¿¡ 3600À» °öÇÏ°í ºÐ¿¡ 60À» °öÇÏ°í Ãʸ¦ ´õÇÑ´Ù. ¹Ý´ë·Î º¯È¯ÇÒ ¶§´Â Àý´ëÃʸ¦ °¢ ´ÜÀ§ÀÇ ÃÊ ´ÜÀ§·Î ³ª´« ÈÄ ÃÖ´ë°ªÀ¸·Î ³ª´« ³ª¸ÓÁö¸¦ ±¸ÇÑ´Ù.

Time °´Ã¼¸¦ Á¤¼ö·Î º¯È¯ÇÏ´Â ¿¬»êÀÚ´Â º°´Ù¸¥ À§ÇèÀÌ ¾ø¾î implicit¸¦ ºÙ¿© ¾Ï½ÃÀûÀ¸·Î ¼±¾ðÇß´Ù. ÇÏ·ç´Â ±æ¾î ºÁ¾ß 86400ÃÊ¿¡ ºÒ°úÇϸç ÀÌ °ªÀº intÀÇ ¹üÀ§¿¡ Æ÷ÇԵDZ⠶§¹®¿¡ ¹®Á¦¾ø´Ù. absec = Now ´ëÀÔ¹®¿¡ ij½ºÆ® ¿¬»êÀÚ¸¦ ¾²Áö ¾Ê¾Æµµ ÄÄÆÄÀÏ·¯°¡ ¾Ë¾Æ¼­ º¯È¯ ¿¬»êÀÚ¸¦ È£ÃâÇÑ´Ù.

¹Ý¸é Á¤¼ö¸¦ Time °´Ã¼·Î º¯È¯ÇÏ´Â ¿¬»êÀÚ´Â À§ÇèÇÒ ¼öµµ ÀÖ¾î explicit¸¦ ºÙ¿© ¸í½ÃÀûÀ¸·Î ¼±¾ðÇß´Ù. Á¤¼ö°¡ 12345³ª 65300 Á¤µµ¶ó¸é À¯È¿ÇÑ Time °´Ã¼·Î º¯È¯µÇÁö¸¸ 123456789 °°Àº Å« °ªÀÌ¸é ½Ã°£°ªÀÌ ³Ê¹« Ä¿Á® ¹ö¸°´Ù. Àý´ëÃÊ°¡ À½¼ö¸é Ȳ´çÇÑ °á°ú°¡ ³ª¿Ã ¼öµµ ÀÖ¾î ¸í½ÃÀû º¯È¯¸¸ Çã¿ëÇÑ´Ù.

Then = 12345 ½ÄÀ¸·Î ¾Ï½ÃÀûÀ¸·Î º¯È¯ÇÒ ¼ö ¾øÀ¸¸ç ij½ºÆ® ¿¬»êÀÚ¸¦ ½á¼­ Then = (Time)12345·Î ¸í½ÃÀû º¯È¯ÇØ¾ß ÇÑ´Ù. ij½ºÆ® ¿¬»êÀÚ¸¦ ½è´Ù´Â °ÍÀº Á¤¼ö°¡ À¯È¿ÇÑ ¹üÀ§³»¿¡ ÀÖÀ½À» º¸ÀåÇÏ¸ç ¸ðµç Ã¥ÀÓÀ» Áö°Ú´Ù´Â ¼±¾ðÀ̹ǷΠÄÄÆÄÀÏ·¯´Â ´õ ÀÌ»ó ½Ãºñ¸¦ °ÉÁö ¾Ê´Â´Ù. ¹°·Ð º¯È¯ ÈÄ¿¡ ¹ß»ýÇÏ´Â ¸ðµç ºÎÀÛ¿ëÀº °³¹ßÀÚ°¡ ´Ù µÚÁý¾î ½á¾ß ÇÑ´Ù.

ÄÄÆÄÀÏ·¯´Â º¯È¯ÀÌ 100% È®½ÇÈ÷ ÁøÂ¥·Î Á¤¸»·Î ¾ÈÀüÇÒ ¶§¸¸ ¾Ï½ÃÀû º¯È¯À» Çã¿ëÇÑ´Ù. Á¶±ÝÀÌ¶óµµ À§ÇèÇÑ º¯È¯Àº °³¹ßÀÚÀÇ ¸í½ÃÀûÀÎ Áö½Ã°¡ ÀÖ¾î¾ß ÇÑ´Ù. ÄÄÆÄÀÏ·¯´Â ¾Ë°í º¸¸é Âü ¼Ò½ÉÇÑ ³à¼®ÀÌ´Ù. ij½ºÆ® ¿¬»êÀÚ¸¦ Á¤ÀÇÇÒ ¶§µµ ¾ÈÀüÇÒ ¶§¸¸ implicit·Î Á¤ÀÇÇÏ¸ç °ª ¼Õ½Ç À§ÇèÀÌ ÀÖÀ» ¶§´Â explicit·Î Á¤ÀÇÇØ¾ß ÇÑ´Ù.

¶§·Î´Â ŸÀÔ º¯È¯ÀÌ ¿©·¯ ´Ü°è¸¦ °ÅÃÄ ÀϾ´Â ´ÙÁß Ä³½ºÆÃÀÌ ¹ß»ýÇÑ´Ù. À§ ¿¹Á¦¿¡ double d = Now; °°Àº Äڵ带 ÀÛ¼ºÇØ º¸ÀÚ. Time °´Ã¼¸¦ ½Ç¼ö·Î º¯È¯ÇÏ´Â ¿¬»êÀÚ´Â Á¤ÀÇÇÏÁö ¾Ê¾ÒÁö¸¸ ½ÇÁ¦·Î ÇØ º¸¸é ´ÙÀ½ °úÁ¤À» °ÅÃÄ ¾Æ¹« ¹®Á¦¾øÀÌ Àß º¯È¯µÈ´Ù.

TimeÀÌ int º¯È¯ ¿¬»êÀÚ¿¡ ÀÇÇØ int·Î ¸ÕÀú º¯È¯µÇ°í Á¤¼ö°¡ ´Ù½Ã ½Ç¼ö·Î º¯È¯µÈ´Ù. ÀÌ ¿¬»êÀÌ °¡´ÉÇÑ ÀÌÀ¯´Â Time °´Ã¼°¡ int·Î º¯È¯ÇÏ´Â ¾Ï½ÃÀûÀÎ ¿¬»êÀÚ¸¦ Á¦°øÇÏ°í Á¤¼ö´Â ½Ã½ºÅÛ¿¡ ÀÇÇØ ¾Ï½ÃÀûÀ¸·Î ½Ç¼ö·Î º¯È¯ °¡´ÉÇϱ⠶§¹®ÀÌ´Ù. º¯È¯ °úÁ¤À» ij½ºÆ® ¿¬»êÀڷΠǥ½ÃÇϸé double d = (double)(int)Now; ¿ä·¸°Ô µÈ´Ù.

Ŭ·¡½º³¢¸®µµ º¯È¯ °¡´ÉÇÏ´Ù. ´Ü, ¿¹¿ÜÀûÀ¸·Î »ó¼Ó °ü°èÀÇ Å¬·¡½º³¢¸®´Â º¯È¯ ¿¬»êÀÚ¸¦ Á¤ÀÇÇÒ ¼ö ¾ø´Ù. Á¤È®ÇÏ°Ô ¾ê±âÇÏÀÚ¸é ºÎÀÚ °ü°èÀÇ Å¬·¡½º³¢¸®´Â ¿ø·¡ º¯È¯ °¡´ÉÇØ º¯È¯ ¿¬»êÀÚ°¡ ÇÊ¿äÄ¡ ¾Ê´Ù. ÀÚ½Ä Å¸ÀÔÀº ºÎ¸ð ŸÀÔÀ¸·Î ¾ðÁ¦µçÁö º¯È¯ÇÒ ¼ö ÀÖÀ¸¸ç ºÎ¸ð ŸÀÔÀº ¸í½ÃÀû ij½ºÆÿ¡ ÀÇÇØ ÀÚ½Ä Å¸ÀÔÀ¸·Î º¯È¯ °¡´ÉÇÏ´Ù.

Ŭ·¡½º°£ÀÇ º¯È¯Àº ¼·¾¾¿Í È­¾¾Ã³·³ °°Àº ½Çü¿¡ ´ëÇÑ ´Ù¸¥ Ç¥ÇöÀ̰ųª ³í¸®ÀûÀÎ ¿¬°ü¼ºÀÌ ÀÖÀ» ¶§ ½Ç¿ëÀûÀÌ´Ù. ±×·¯³ª ¹®¹ýÀûÀ¸·Î °¡´ÉÇÏ´Ù Çصµ ½ÇÁúÀûÀ¸·Î Àǹ̰¡ ¾ø´Â °æ¿ìµµ ÀÖ´Ù. »ç¶÷À» ½Ã°£À¸·Î ¹Ù²Û´Ù°Å³ª Á¶ÆøÀÌ °­¾ÆÁö°¡ µÇ´Â Åõµ ¾ø´Â º¯È¯Àº ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ´ÙÀ½ ¿¹Á¦´Â ¹Ð¸®¹ÌÅÍ¿Í ÀÎÄ¡ ´ÜÀ§¸¦ º¯È¯ÇÑ´Ù.

 

MiliInch

using System;

 

class Inch {

     public double len;

     public Inch(double alen) { len = alen; }

     public void OutValue() { Console.WriteLine($"{len:F2}ÀÎÄ¡"); }

     public static implicit operator Mili(Inch i) {

          return new Mili((uint)(i.len * 25.4));

     }

     public static implicit operator Inch(Mili m) {

          return new Inch(m.len / 25.4);

     }

}

 

class Mili {

     public uint len;

     public Mili(uint alen) { len = alen; }

     public void OutValue() { Console.WriteLine($"{len}¹Ð¸®"); }

}

 

class CSTest {

     static void Main() {

          Inch disk = new Inch(0);

          Mili shoes = new Mili(0);

 

          disk.len = 3.5;

          shoes = disk;

          shoes.OutValue();

 

          shoes.len = 275;

          disk = shoes;

          disk.OutValue();

     }

}

½ÇÇà°á°ú

88¹Ð¸®

10.83ÀÎÄ¡

 

Inch Ŭ·¡½º´Â ½Ç¼ö·Î µÈ ÀÎÄ¡¸¦ Ç¥ÇöÇϸç Mili Ŭ·¡½º´Â Á¤¼ö·ÎµÈ ¹Ð¸®¹ÌÅ͸¦ Ç¥ÇöÇÑ´Ù. µÎ ŸÀÔ°£ÀÇ º¯È¯ ¿¬»êÀÚ°¡ ¸ðµÎ Á¤ÀǵǾî ÀÖ¾î ¾ç¹æÇâÀ¸·Î º¯È¯ °¡´ÉÇÏ´Ù. 1ÀÎÄ¡´Â 25.4¹Ð¸®¹ÌÅÍÀ̹ǷΠÀÌ »ó¼ö¸¦ °öÇÏ°í ³ª´©¸é µÎ ŸÀÔÀ» ½±°Ô º¯È¯ÇÒ ¼ö ÀÖ´Ù. Main¿¡¼­´Â 3.5ÀÎÄ¡°¡ ¸î ¹Ð¸®¹ÌÅÍÀÎÁö, 275¹Ð¸®¹ÌÅÍ°¡ ¸î ÀÎÄ¡ÀÎÁö °è»êÇÏ¿© Ãâ·ÂÇß´Ù.

¾çÂÊÀ¸·Î º¯È¯ÇÏ´Â ±â´ÉÀ» »ç¿ëÇßÀ¸¹Ç·Î µÎ °³ÀÇ º¯È¯ ÇÔ¼ö°¡ ¸ðµÎ ÇÊ¿äÇÏ´Ù. º¯È¯ ÇÔ¼öÀÇ ¼Ò¼ÓÀº Áß¿äÇÏÁö ¾ÊÀºµ¥ ¾çÂÊ Å¬·¡½º ¾îµð¿¡³ª Á¸ÀçÇÏ¸é µÈ´Ù. ¾îÂ÷ÇÇ º¯È¯ ÇÔ¼ö´Â Á¤ÀûÀ̹ǷΠ¿¬»êÀÚ°¡ ¼±¾ðµÈ Ŭ·¡½º´Â ³í¸®ÀûÀÎ ¼Ò¼ÓÀÏ »ÓÀÌ´Ù. ¿¹Á¦¿¡¼­´Â Inch Ŭ·¡½º¿¡ µÎ ¿¬»êÀÚ¸¦ Á¤ÀÇÇߴµ¥ Mili Ŭ·¡½º·Î ¿Å°Üµµ »ó°ü¾øÀ¸¸ç µÎ ¿¬»êÀÚ¸¦ ¾çÂÊ¿¡ Çϳª¾¿ Âõ¾î ³õ¾Æµµ µÈ´Ù.

7-3-4.¿À¹ö·ÎµùÀÇ ¾Ö¸ÅÇÔ

¿À¹ö·ÎµùÀº Æí¸®ÇÑ ±â´ÉÀÌÁö¸¸ °úÇÏ°Ô ¾²¸é À§ÇèÇÑ ¸éµµ ÀÖ¾î ÁÖÀÇÇÒ ÇÊ¿ä°¡ ÀÖ´Ù. ¿À¹ö·ÎµùµÈ ¸Þ¼­µå¸¦ È£ÃâÇÒ ¶§ ¸Þ¼­µå¸¦ ¼±ÅÃÇÏ´Â °ÍÀº ÄÄÆÄÀÏ·¯ÀÇ Ã¥ÀÓÀ̸ç ÄÄÆÄÀÏ Áß¿¡ °áÁ¤µÈ´Ù. ±×·¡¼­ ¿À¹ö·ÎµùÀÌ º¹ÀâÇØÁö¸é ÄÄÆÄÀÏ ½Ã°£ÀÌ ¿À·¡ °É¸®´Âµ¥ ´ÙÇàÈ÷ ½ÇÇà ¼Óµµ¿Í´Â »ó°üÀÌ ¾ø´Ù.

ÄÄÆÄÀÏ·¯´Â È£Ãâ¹®ÀÇ Àμö °³¼ö¿Í ŸÀÔ(½Ã±×´Ïó)À» º¸°í ÀûÀýÇÑ ¸Þ¼­µå¸¦ ¼±ÅÃÇϴµ¥ À̶§ ¿À¹ö·Îµå °áÁ¤Çϱâ(Overload Resolution)¶ó´Â º¹ÀâÇÑ ³»ºÎ Á¤Ã¥ÀÌ Àû¿ëµÈ´Ù. ÀÌ Á¤Ã¥¿¡´Â ŸÀÔ ºñ±³»Ó¸¸ ¾Æ´Ï¶ó ref, out µîÀÇ ÁöÁ¤ÀÚ, ŸÀÔ°£ÀÇ ¾Ï½ÃÀû, ¸í½ÃÀû º¯È¯ ±ÔÄ¢±îÁö °í·ÁµÇ¾î »ó»ó ÀÌ»óÀ¸·Î º¹ÀâÇÏ´Ù.

Á¤È®È÷ ÀÏÄ¡ÇÏ´Â ¸Þ¼­µå°¡ ¹ß°ßµÇ¸é ¹®Á¦¾øÁö¸¸ ±×·¸Áö ¾ÊÀ» °æ¿ì ÄÄÆÄÀÏ·¯°¡ Àç·®²¯ È£ÃâÇÒ ¸Þ¼­µå¸¦ ¼±ÅÃÇÑ´Ù. ¿ì¼± È£Ãâ °¡´ÉÇÑ Èĺ¸ ¸ñ·Ï(Applicable)À» ÀÛ¼ºÇÏ°í ÀÌ Áß¿¡ ±×³ª¸¶ °¡Àå ³ªÀº(Better) ¸Þ¼­µå¸¦ ¼±ÅÃÇÑ´Ù. ±×³ª¸¶ ³´´Ù´Â ±âÁØÀº ŸÀÔÀÌ °¡Àå ±ÙÁ¢ÇÑ´Ù´Â ¶æÀÌ´Ù. ½Ã±×´Ïó°¡ ÀÏÄ¡ÇÏ´Â ¸Þ¼­µå°¡ ¾ø´õ¶óµµ ¾Ï½ÃÀû º¯È¯ÀÌ °¡´ÉÇϸé ÄÄÆÄÀÏ·¯°¡ ¾Ë¾Æ¼­ º¯È¯ÇÑ ÈÄ È£ÃâÇÑ´Ù.

 

OverMethod

using System;

 

class CSTest {

     static void Method(short a) { Console.WriteLine("short"); }

     static void Method(int a) { Console.WriteLine("int"); }

     static void Method(uint a) { Console.WriteLine("uint"); }

     static void Method(long a) { Console.WriteLine("long"); }

     static void Method(double a) { Console.WriteLine("double"); }

     static void Main() {

          short s = 1234;

          Method(s);

     }

}

½ÇÇà°á°ú

short

 

Method ¸Þ¼­µå°¡ 5°³ÀÇ ½Ã±×´Ïó·Î ¿À¹ö·ÎµùµÇ¾î ÀÖÀ¸¸ç °¢ ¸Þ¼­µå´Â ÀÚ½ÅÀÌ È£ÃâµÇ¾ú´Ù´Â °ÍÀ» È­¸éÀ¸·Î Ãâ·ÂÇÑ´Ù. Main¿¡¼­ shortÇü º¯¼ö¸¦ ¼±¾ðÇÑ ÈÄ ÀÌ º¯¼ö¸¦ Method·Î ³Ñ°å´Ù. À̶§ °ú¿¬ ¾î¶² ¸Þ¼­µå°¡ ¼±ÅÃµÉ °ÍÀΰ¡°¡ ¹®Á¦´Ù. ÀÌ °æ¿ì short¸¦ ¹Þ´Â ¸Þ¼­µå°¡ ÀÖ¾î Method(short)°¡ È£ÃâµÈ´Ù. ¸¸¾à Method(short)°¡ ¾ø´Ù¸é ¾î¶»°Ô µÉ±î? ÀÌ ¸Þ¼­µå¸¦ ÁÖ¼® ó¸®ÇÑ ÈÄ ´Ù½Ã ½ÇÇàÇØ º¸¸é Method(int)°¡ È£ÃâµÈ´Ù. short´Â ¾Ï½ÃÀûÀ¸·Î int·Î º¯È¯ °¡´ÉÇϹǷΠÄÄÆÄÀÏ·¯´Â Method(int)°¡ shortÇü Àμö¸¦ ¹Þ¾Æµµ ¹®Á¦ ¾ø´Ù°í ÆÇ´ÜÇÑ´Ù.

Method(int)µµ ÁÖ¼® ó¸®ÇÏ¸é ³²Àº ¼¼ °³ÀÇ ¸Þ¼­µå Áß ´©°¡ È£ÃâµÉ±î? Method(uint)°¡ ±ÙÁ¢ÇØ º¸ÀÌÁö¸¸ ½ÇÇàÇØ º¸¸é Method(long)ÀÌ È£ÃâµÈ´Ù. uint´Â ºÎÈ£¸¦ Ç¥½ÃÇÒ ¼ö ¾ø¾î short¿Í ¾Ï½ÃÀûÀ¸·Î ȣȯµÇÁö ¾ÊÀ¸¸ç longÀÌ ´õ °¡±õ´Ù. TimeInt ¿¹Á¦¿¡ ´ÙÀ½ Äڵ带 ÀÛ¼ºÇϸé Á¤¼ö°¡ Ãâ·ÂµÈ´Ù.

 

Time Now = new Time(12, 34, 56);

Console.WriteLine(Now);

 

TimeÀ» Àμö·Î ¹Þ´Â WriteLine ¸Þ¼­µå´Â ¾øÁö¸¸ ¾Ï½ÃÀû º¯È¯¿¡ ÀÇÇØ Now°¡ int°¡ µÉ ¼ö ÀÖ´Ù. ¸¸¾à Time Ŭ·¡½º°¡ double·Î º¯È¯Çϴ ij½ºÆ® ¿¬»êÀÚ¸¦ Á¤ÀÇÇÏ¸é ½Ç¼ö·Îµµ Ãâ·ÂµÈ´Ù. ÄÄÆÄÀÏ·¯´Â Ä£ÀýÇؼ­ °¡´ÉÇÑ ÇÔ¼ö¸¦ ã¾Æ Àû¿ëÇÏÁö¸¸ ¶§·Î´Â °ú´Ù Ä£Àý¿¡ ÀÇÇØ ºÎÁ¤È®ÇÑ ÇÔ¼ö°¡ È£ÃâµÉ ¼öµµ ÀÖ´Ù.

ij½ºÆ® ¿¬»êÀÚ¿¡ ´ëÇؼ­µµ ¿ª½Ã ¿À¹ö·Îµù ¹®Á¦°¡ ÀÖ´Ù. ¿©·¯ °³ÀÇ Ä³½ºÆ® ¿¬»êÀÚ°¡ ¾Ï½ÃÀûÀ¸·Î ¿À¹ö·ÎµùµÇ¾î ÀÖÀ» ¶§ ¾î¶² ¿¬»êÀÚ¿¡ ÀÇÇØ º¯È¯µÉ °ÍÀΰ¡´Â ÄÄÆÄÀÏ·¯°¡ ¾ö°ÝÇÑ ³»ºÎ ±ÔÄ¢¿¡ ÀÇ°ÅÇÏ¿© Áö ¸¾´ë·Î °áÁ¤ÇÑ´Ù. ´ÙÀ½Àº Time Ŭ·¡½º¿¡ Á¤¼ö ¹× ½Ç¼ö º¯È¯ ¿¬»êÀÚ¸¦ µ¿½Ã¿¡ Á¤ÀÇÇÑ °ÍÀÌ´Ù. ½Ã°£À» Á¤¼öºÎ¿¡ µÎ°í ºÐÀ» ¼Ò¼öºÎ¿¡ µÎ´Â ½ÄÀ¸·Î ½Ç¼ö·Î º¯È¯ °¡´ÉÇÏ´Ù.

 

CastOver

½ÇÇà°á°ú

using System;

 

class Time {

     public int hour, min, sec;

     public Time() { }

     public Time(int h, int m, int s) { hour = h; min = m; sec = s; }

     public static implicit operator int(Time T) {

          return T.hour * 3600 + T.min * 60 + T.sec;

     }

     public static implicit operator double(Time T) {

          return T.hour + T.min / 100.0;

     }

}

 

class CSTest {

     static void Main() {

          Time Now = new Time(12, 34, 56);

          Console.WriteLine((int)Now);

          Console.WriteLine((double)Now);

          Console.WriteLine(Now);

     }

}

45296

12.34

45296

 

Main¿¡¼­ Time °´Ã¼¸¦ »ý¼ºÇÏ°í ¼¼ ¹ø Ãâ·ÂÇߴµ¥ µÎ ¹øÀº ij½ºÆ® ¿¬»êÀÚ¸¦ »ç¿ëÇß°í ÇÑ ¹øÀº ¾Ï½ÃÀûÀ¸·Î Ãâ·ÂÇß´Ù. ¸í½ÃÀûÀ¸·Î ij½ºÆÃÇÒ ¶§´Â ÁöÁ¤ÇÑ Å¸ÀÔ¿¡ ¸Â´Â º¯È¯ ¿¬»êÀÚ°¡ È£ÃâµÇÁö¸¸ ¾Ï½ÃÀûÀ¸·Î È£ÃâÇÒ ¶§´Â ¾î¶² ¹öÀüÀÌ È£ÃâµÉÁö ¾Ë±â ½±Áö ¾Ê´Ù. ÀÌ ¿¹Á¦ÀÇ °æ¿ì´Â Á¤¼ö·Î º¯È¯µÇ¾î Ãâ·ÂµÇ´Âµ¥ ÀǵµÇÑ ¹Ù¶ó¸é ´ÙÇàÀÌÁö¸¸ ±×·¸Áö ¾ÊÀ» ¼öµµ ÀÖ´Ù. »ç¿ëÀÚ´Â ½Ç¼ö°¡ ´õ Å« ŸÀÔÀ̹ǷΠ½Ç¼ö·Î º¯È¯µÇ´Â °ÍÀÌ ´õ ÀÚ¿¬½º·´´Ù°í »ý°¢ÇÒ ¼öµµ ÀÖÀ¸¸ç ÀÌ·¸°Ô ±â´ëÇß´Ù¸é ¿øÇÏ´Â °Í°ú´Â ´Ù¸¥ °á°ú°¡ ³ª¿Â °ÍÀÌ´Ù.

20°³ Á¤µµÀÇ ¿À¹ö·Îµå°¡ Á¸ÀçÇÏ´Â ¸Þ¼­µå¶ó¸é °áÄÚ °£´ÜÇÑ ¹®Á¦°¡ ¾Æ´Ï´Ù. ÄÄÆÄÀÏ ¿¡·¯´Â ¹ß»ýÇÏÁö ¾Ê¾Æ °³¹ßÀÚ´Â ¿øÇϴ´ë·Î È£ÃâµÇ¾ú´Ù°í »ý°¢ÇÏ°í ³Ñ¾î°¡ ¹ö¸± ¼öµµ ÀÖÀ¸¸ç À߸øµÈ È£ÃâÀÌ ¾ðÁ¦ ¸»½éÀ» ÀÏÀ¸Å³Áö ¾Ë ¼ö ¾ø´Ù. ÃÖ¾ÇÀÇ ½Ã³ª¸®¿À´Â ÀÌ È£ÃâÀÌ ¸±¸®ÁîµÉ ¶§±îÁö ¹ß°¢µÇÁö ¾Ê´Â °æ¿ìÀε¥ ÄÄÆÄÀÏ·¯´Â µÞÀÏÀ» Ã¥ÀÓÁöÁö ¾Ê´Â´Ù. »ç½Ç Ã¥ÀÓÁú ´É·Âµµ ¾ø´Ù. ±×·¡¼­ ÀÌ·± ¾Ö¸ÅÇÑ °æ¿ì´Â °¡±ÞÀû ¸¸µéÁö ¸»¾Æ¾ß ÇÑ´Ù. ´ÙÀ½ ¿¹Á¦´Â ¾Æ¿¹ ¿¡·¯·Î 󸮵Ǵ ±Ø´ÜÀûÀÎ °æ¿ìÀÌ´Ù.

 

OverError

using System;

 

class Time {

     public int hour, min, sec;

     public Time() { }

     public Time(int h, int m, int s) { hour = h; min = m; sec = s; }

     public static implicit operator int(Time T) {

          return T.hour * 3600 + T.min * 60 + T.sec;

     }

     public static explicit operator Time(int abs) {

          Time T = new Time();

          T.hour = abs / 3600;

          T.min = (abs / 60) % 60;

          T.sec = abs % 60;

          return T;

     }

}

 

class CSTest {

     static void Method(int a, Time b) { Console.WriteLine("int, Time"); }

     static void Method(Time a, int b) { Console.WriteLine("Time, int"); }

     static void Main() {

          Time Now = new Time(12, 34, 56);

          int i = 1234;

 

          Method(i, Now);

          Method(Now, i);

          Method(Now, Now);

          Method(i, i);

     }

}

 

Time Ŭ·¡½º´Â TimeInt ¿¹Á¦ÀÇ °Í°ú °°À¸¸ç Á¤¼ö¿Í Time°£ÀÇ »óÈ£ º¯È¯ ¿¬»êÀÚ°¡ Á¤ÀǵǾî ÀÖ´Ù. Method´Â int¿Í TimeÀ» ¹Þ´Â ¹öÀü°ú Time°ú int¸¦ ¹Þ´Â µÎ °³ÀÇ ¹öÀüÀÌ Á¤ÀǵǾî ÀÖÀ¸¸ç Main¿¡¼­ Time °´Ã¼¿Í intÇü º¯¼ö·Î Method¸¦ È£ÃâÇÑ´Ù. À̶§ ¾ÕÀÇ µÎ È£ÃâÀº Á¤È®ÇÏ°Ô ÀÏÄ¡ÇÏ´Â ¸Þ¼­µå°¡ ÀÖ¾î ¹®Á¦°¡ ¾ø´Ù.

±×·¯³ª µÚÂÊ µÎ °³ÀÇ È£ÃâÀº ¾Ö¸ÅÇÏ¿© ÄÄÆÄÀÏ °ÅºÎµÈ´Ù. Method(Now, Now) È£Ãâ¹®Àº Á¤È®ÇÑ ¹öÀüÀº ¾ø°í ±×³ª¸¶ ³ªÀº ¹öÀüÀ» ã´Â´Ù. ÄÄÆÄÀÏ·¯´Â ³»ºÎ ±ÔÄ¢¿¡ ÀÇÇØ È£Ãâ¹®°ú ¾î¿ï¸®´Â ¸Þ¼­µå¸¦ ã°í ±× Áß °¡Àå ÀûÇÕÇÑ ¸Þ¼­µå¸¦ ¼±ÅÃÇÏ·Á°í ½ÃµµÇÑ´Ù. ±×·±µ¥ µÎ MethodÀÇ Á¡¼ö°¡ ¿ÏÀüÈ÷ °°¾Æ ¾î¶² °ÍÀÌ ´õ ³´´Ù°í °áÁ¤ÇÒ ¼ö ¾ø´Ù.

Á¸ÀçÇÏ´Â ¸Þ¼­µå¿¡ ³¢¿ö ¸ÂÃß·Á¸é ¾î·µç ÇϳªÀÇ TimeÀ» int·Î º¯È¯ÇØ¾ß Çϴµ¥ ¼ø¼­¿Ü¿¡´Â Â÷ÀÌ°¡ ÀüÇô ¾ø´Ù. ¸¶Áö¸· È£Ãâ¹®ÀÎ Method(i, i)µµ ¸¶Âù°¡Áö ÀÌÀ¯·Î ¾Ö¸ÅÇÏ´Ù. ÀÌ·± °æ¿ì¸¦ ¸¸³ª¸é ÄÄÆÄÀÏ·¯´Â ´õ ÀÌ»ó Àß³­ üÇÏÁö ¾ÊÀ¸¸ç Ç׺¹ÀÇ Ç¥½Ã·Î ¼¶¶àÇÑ ¿¡·¯ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÑ´Ù. µÑ Áß Çϳª¸¦ ´ëÃæ °ñ¶ó ÁÙ ¼ö ÀÖÁö¸¸ ±× °á°ú¿¡ ´ëÇØ Ã¥ÀÓÁú ¼ö ¾ø±â ¶§¹®ÀÌ´Ù.