¼Ò¼³°°ÀºC#  Á¦5°­ÀÇ C#ÀÇ ´ÙÇü¼º  15. ÀÎÅÍÆäÀ̽ºÀÇ ¸í½ÃÀû ±¸Çö  

 

5.15 ÀÎÅÍÆäÀ̽ºÀÇ ¸í½ÃÀû ±¸Çö

 

À̹ø Àå¿¡¼­ ¹è¿ï °ÍÀº ÀÎÅÍÆäÀ̽º ¸Þ¼­µå¸¦ ¸í½ÃÀû(Ù¥ãÆîÜ)À¸·Î ±¸ÇöÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù. ¸í½ÃÀû ±¸ÇöÀ̶õ ±ÛÀÚ ±×´ë·Î ¼Ò¼ÓÀÌ ¾îµðÀÎÁö¸¦ ºÐ¸íÈ÷ ±¸ºÐÇØ¼­ ±¸ÇöÀ» ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ¾Õ¿¡¼­µµ Àá±ñ ¾ð±ÞÀÌ µÇ±ä Çߴµ¥, ¸¸¾à¿¡ ¼­·Î ´Ù¸¥ ÀÎÅÍÆäÀ̽ºµéÀÌ °°Àº À̸§À» °®´Â ¸Þ¼­µå¸¦ °®°í Àִµ¥ ÀÌ ÀÎÅÍÆäÀ̽ºµéÀ» µ¿½Ã¿¡ »ó¼Ó ¹Þ¾Æ ±¸ÇöÇÑ´Ù¸é ¾Æ¸¶µµ ÄÄÇ»ÅÍ´Â ³­Ã³ÇØ ÇÒ °ÍÀÔ´Ï´Ù. ¿Ö³ÄÇÏ¸é ±× ¸Þ¼­µå°¡ È£ÃâµÇ¸é ¾î´À ÀÎÅÍÆäÀ̽ºÀÇ ¸Þ¼­µåÀÎÁö¸¦ ¾Ë ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¾øÀ¸´Ï±î ¸»ÀÔ´Ï´Ù. ÀÎÅÍÆäÀ̽ºÀÇ ¸Þ¼­µå´Â ¸Å°³º¯¼ö·Î Áߺ¹Á¤ÀÇ(Overloading)¸¦ ÇÒ ¼ö ¾ø½À´Ï´Ù. ±×·¡¼­ »ý°¢ÇØ ³½ °ÍÀÌ µ¿ÀÏÇÑ ¸Þ¼­µåÀÇ À̸§ ¾Õ¿¡´Â ÇØ´ç ÀÎÅÍÆäÀ̽º ¸íÀ» ¸í½ÃÇØ¼­ ±¸º°ÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.

 

¾Æ·¡ÀÇ ¿¹Á¦´Â µÎ °³ÀÇ ÀÎÅÍÆäÀ̽º InterA¿Í InterB°¡ µ¿ÀÏÇÑ À̸§ÀÇ ¸â¹ö¸Þ¼­µåÀÎ a() ¸Þ¼­µå¸¦ °¡Áö°í ÀÖÀ» ¶§, ±¸Çö Ŭ·¡½º¿¡¼­ ¸í½ÃÀûÀ¸·Î ÀÌ ¸Þ¼­µåµéÀ» ±¸ÇöÇÏ´Â ¿¹¸¦ º¸¿©ÁÖ°í ÀÖ½À´Ï´Ù. ¿¹Á¦¸¦ º¸½Ã¸é ´ç¿¬ÇÏ´Ù°í »ý°¢ÇÏ½Ç °Ì´Ï´Ù.

 

&

ExplicitTestMain.cs

Ü ¸í½ÃÀû ±¸ÇöÀÇ ¿¹Á¦

using System;

interface InterA {

     void a();

}

interface InterB {

     void a();

     void b();

}

class ExplicitTest : InterA, InterB {

       void InterA.a() {

           Console.WriteLine( "InterA_a" );

     }

       void InterB.a() {

           Console.WriteLine( "InterB_a" );

     }

     public void b() {

           Console.WriteLine( "InterB_b" );

     }

}

public class ExplicitTestMain{

       public static void Main() {

           ExplicitTest t = new ExplicitTest();

           InterA interface1 = t;

           interface1.a();

                            

           InterB interface2 = t;

           interface2.a();

           interface2.b();

    }//main

}//class

C:\C#Example\05>csc ExplicitTestMain.cs

C:\C#Example\05>ExplicitTestMain

InterA_a

InterB_a

InterB_b

 

¿©±â¼­ ´«¿©°Üº¸½Ç °ÍÀº Çѱºµ¥ ¹Û¿¡ ¾ø½À´Ï´Ù. ³ª¸ÓÁö´Â ¾Õ ÀåÀÇ ¿¹Á¦¿Í ¶È°°Àº °ÍÀ̴ϱî¿ä. ¹Ù·Î µ¿ÀÏÇÑ À̸§ÀÇ ¸Þ¼­µå¸¦ ±¸ÇöÇÒ ¶§, ¸Þ¼­µå¸í ¾Õ¿¡ ÇØ´ç ÀÎÅÍÆäÀ̽ºÀÇ À̸§À» ¸í½ÃÇØ ±¸ÇöÇÑ °ÍÀÔ´Ï´Ù. À̰ÍÀº Ŭ·¡½ºÀÇ »ó¼Ó¿¡¼­µµ µ¿ÀÏÇÏ°Ô Àû¿ëµË´Ï´Ù.

 

n                 class ExplicitTest : InterA, InterB {

n                    void InterA.a() {...}

n                    void InterB.a() {...}

n                    ...

n                  }

 

¸¸¾à ¸Þ¼­µå¸¦ ¸í½ÃÀûÀ¸·Î ±¸ÇöÇÏÁö ¾ÊÀ¸¸é, ¾î´À °ÍÀÌ ¾î´À °ÍÀÎÁö ±¸ºÐÇÒ ¼ö ¾ø¾î ÄÄÆÄÀÏ·¯´Â ´ç¿¬È÷ ¾Æ·¡¿Í °°Àº ¿¡·¯¸¦ ³¾ °ÍÀÔ´Ï´Ù.

 

C:\C#Example\05>csc ExplicitTest.cs

ExplicitTest.cs(16,7): error CS0111: ¡®ExplicitTest¡¯ Ŭ·¡½º´Â µ¿ÀÏÇÑ ¸Å°³º¯¼ö Çü½ÄÀ»

        °¡Áø 'a' ¸â¹ö¸¦ ¹Ì¸® Á¤ÀÇÇÕ´Ï´Ù.

ExplicitTest.cs(13,7): (ÀÌÀü ¿À·ù¿Í °ü·ÃµÈ ±âÈ£ À§Ä¡)

 

±×¸®°í ¸í½ÃÀûÀ¸·Î ±¸ÇöÇÑ ¸Þ¼­µå´Â Á¢±ÙÁöÁ¤ÀÚ¸¦ ºÙÀÌÁö ¾Ê½À´Ï´Ù. ¸¸¾à publicÀ» ¸Þ¼­µå ¾Õ¿¡ ¼±¾ðÇÏ°Ô µÇ¸é ´ÙÀ½ °°Àº ¿¡·¯¸¦ ¹ß»ýÇÒ °ÍÀÔ´Ï´Ù.

 

C:\C#Example\05>csc ExplicitTest.cs

ExplicitTest.cs(13,14): error CS0106: 'public' ÇÑÁ¤ÀÚ´Â ÀÌ Ç׸ñ¿¡ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.

 

¿Ö ¿¡·¯°¡ ³¯±î¿ä? ÀÌÀ¯´Â ¸í½ÃÀûÀ¸·Î ±¸ÇöµÈ ¸Þ¼­µå´Â ÀÎÅÍÆäÀ̽º¸íÀÌ ¸Þ¼­µå ¾Õ¿¡ ºÙ±â ¶§¹®¿¡, ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ ¸Þ¼­µåÀÓ¿¡ Ʋ¸²ÀÌ ¾ø½À´Ï´Ù. µû¶ó¼­ ÀÎÅÍÆäÀ̽º ¸â¹öÀÇ °æ¿ì¿Í °°ÀÌ ±»ÀÌ publicÀ» ºÙÀÌÁö ¾Ê¾Æµµ ´ç¿¬È÷ publicÀÌ µÇ´Â °ÍÀ̶ó°í »ý°¢ÇÏ¸é °£´ÜÇÕ´Ï´Ù. ÀÎÅÍÆäÀ̽ºÀÇ ¸â¹ö¿¡µµ Á¢±ÙÁöÁ¤ÀÚ¸¦ ºÙÀÏ °æ¿ì¿¡´Â ÄÄÆÄÀÏ ¿¡·¯°¡ ³µ¾úÁö¿ä

 

¾à°£Àº º¹ÀâÇÒ °Í°°Àº ÁÖÁ¦¸¦ Çϳª ³¡³Â½À´Ï´Ù. ±×·¯³ª ÀÎÅÍÆäÀ̽º°¡ °´Ã¼ÁöÇâ ¾ð¾î¿¡¼­ Â÷ÁöÇÏ´Â ºñÁßÀ» »ý°¢ÇÒ ¶§´Â ¹Ýµå½Ã ¼··ÆÇϰí Áö³ª¾ß¸¸ µÇ´Â ÀåÀÔ´Ï´Ù. ¡®ÀÎÅÍÆäÀ̽º´Â ÀÎÅÍÆäÀ̽º´Ù¡¯¶ó´Â ´À³¦À» °¡Áö½Ç ¶§±îÁö ºÎ´ÜÈ÷ ³ë·ÂÇϽʽÿÀ.



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