¼Ò¼³°°ÀºC#  Á¦5°­ÀÇ C#ÀÇ ´ÙÇü¼º  14. ÀÎÅÍÆäÀ̽ºÀÇ Áߺ¹»ó¼Ó  

 

5.14 ÀÎÅÍÆäÀ̽ºÀÇ Áߺ¹»ó¼Ó

 

ÀÎÅÍÆäÀ̽º´Â º¸Åë ¡®Áߺ¹»ó¼ÓÀ» º¯Ä¢ÀûÀ¸·Î Áö¿øÇÑ´Ù¡¯¶ó°í µÇ¾î ÀÖ½À´Ï´Ù. º¸Åë Áߺ¹»ó¼ÓÀ̶ó°í ±×³É ¹Ð¾î ºÙ¿© ¹ö¸®¸é ÀÌÇØ°¡ ÈûµéÁö ¾Ê°Ú½À´Ï±î? Áߺ¹»ó¼ÓÀ̶õ ¸» ±×´ë·Î 2°³ ÀÌ»óÀÇ Å¬·¡½º¸¦ µ¿½Ã¿¡ »ó¼Ó ¹Þ´Â °ÍÀ» ¸»ÇÕ´Ï´Ù. ÇÏÁö¸¸ C#¿¡¼­ Áߺ¹»ó¼ÓÀ» Áö¿øÇÏÁö ¾Ê´Â ÀÌÀ¯´Â ¹«¾ùÀϱî¿ä? ±× ÀÌÀ¯¸¦ ±×¸²À¸·Î Çѹø ±×·Á º¸°Ú½À´Ï´Ù.

 

±×¸² 5-3 Áߺ¹»ó¼ÓÀÇ ¹®Á¦

 

Áߺ¹»ó¼ÓÀ» »ç¿ëÇßÀ» ¶§ ¹®Á¦Á¡À» Á¤È®ÇÏ°Ô º¸¿©ÁÖ°í ÀÖ´Â ±×¸²ÀÔ´Ï´Ù. ¾ÆµéA¿Í ¾ÆµéB µÑ ´Ù ¾Æ¹öÁöF·ÎºÎÅÍ »ó¼Ó ¹Þ°í ³­ ÈÄ, ´Ù½Ã ¾ÆµéA¿Í ¾ÆµéB¸¦ Áߺ¹»ó¼Ó ÇßÀ» ¶§ ¹ß»ýÇÏ´Â ¹®Á¦Á¡Àº ¾Æ¹öÁöF°¡ µÑ »ý±ä´Ù´Â °ÍÀÔ´Ï´Ù. ¾Æ¹öÁöF¸¦ µÑ ´Ù »ó¼Ó ¹Þ±â ¶§¹®¿¡ ¼ÕÀÚÀÔÀå¿¡¼­´Â ¾Æ¹öÁöF°¡ µÑÀÌ µÇ´Â °ÍÀÌÁÒ. ÀÌ·¸°Ô µÇ¸é ¼ÕÀÚ°¡ ¾Æ¹öÁöF¸¦ »ç¿ëÇÒ ¶§ ¾ÆµéAÀÇ ¾Æ¹öÁöFÀÎÁö ¾ÆµéB¿¡ ¾Æ¹öÁö FÀÎÁö ¸ðÈ£ÇÔÀÌ ¹ß»ýÇÕ´Ï´Ù. C++¿¡¼­´Â ¿µ¿ª ÁöÁ¤ÀÚ¸¦ ÀÌ¿ëÇØ¼­ À̰ÍÀ» ÇØ°áÇϰí ÀÖ°í, C#¿¡¼­´Â ´ÜÀÏ»ó¼Ó¸¸À» Áö¿øÇϸç ÀÎÅÍÆäÀ̽ºÀÇ Áߺ¹»ó¼Ó¸¸À» Çã¿ëÇϰí ÀÖ½À´Ï´Ù. »ó¼Ó°ü°è°¡ ´õ º¹ÀâÇØÁö°í »ó¼ÓÀ» °ÅµìÇÏ°Ô µÇ¸é¼­ ¿ÀÈ÷·Á ´õ Å« ¹®Á¦Á¡À» ¹ß»ý½ÃŰ°Ô µÇÀÚ C#¿¡¼­´Â ¾Æ¿¹ Ŭ·¡½ºÀÇ Áߺ¹»ó¼ÓÀ» ±ÝÁöÇϰí ÀÖ½À´Ï´Ù. C#Àº ±âº»ÀûÀ¸·Î ´ÜÀÏ Å¬·¡½ºÀÇ »ó¼Ó¸¸ÀÌ °¡´ÉÇÕ´Ï´Ù.

 

ÇÏÁö¸¸ ¾Æ¹öÁö°¡ ´Ù¸¦ ¶§ »ç¿ëÇÑ´Ù¸é ¾î´À Á¤µµ È¿À²¼ºÀÌ ÀÖ½À´Ï´Ù. ÇѲ¨¹ø¿¡ µÎ °¡Áö ±â´ÉÀ» ¸ðµÎ »ó¼ÓÇÏ´Â °ÍÀº ¾ÆÁÖ ¸·°­ÇÑ ÈûÀÔ´Ï´Ù. À̰ÍÀ» ¾î´À Á¤µµ Ȱ¿ëÇϰí ÀÖ´Â °ÍÀÌ ¹Ù·Î ÀÎÅÍÆäÀ̽ºÀÔ´Ï´Ù.

 

´ÙÀ½ ¿¹Á¦´Â ÀÎÅÍÆäÀ̽º°¡ ´Ù¸¥ ÀÎÅÍÆäÀ̽º·ÎºÎÅÍ »ó¼Ó ¹Þ´Â °ÍÀ» º¸¿©ÁÖ°í, µÎ °³ÀÇ ÀÎÅÍÆäÀ̽º¸¦ ÇϳªÀÇ Å¬·¡½º°¡ »ó¼ÓÇØ ±¸ÇöÇÏ´Â °ÍÀ» º¸¿© ÁÖ°í ÀÖ½À´Ï´Ù.

 

&

MultiInheritanceMain.cs

Ü Áߺ¹»ó¼ÓÀ» Áö¿øÇÏ´Â ÀÎÅÍÆäÀ̽ºÀÇ ±¸Çö

using System;

interface InterA {

      void a();

}

interface InterB {

      void b();

}

interface InterC : InterA {

        void c();

}

class MultiInheritance : Object, InterB, InterC {

      public void a() {

              Console.WriteLine( "InterA_a()" );

      }

      public void b() {

              Console.WriteLine( "InterB_b()" );

      }

      public void c() {

              Console.WriteLine( "InterC_c()" );

      }

}

public class MultiInheritanceMain{

        public static void Main() {

                  MultiInheritance mi = new MultiInheritance();

             InterA interface1 = mi;

             interface1.a();

                            

             InterB interface2 = mi;

             interface2.b();

                            

             InterC interface3 = mi;

                 interface3.a();

             interface3.c();

     }//class

}//main

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

C:\C#Example\05>MultiInheritanceMain

InterA_a()

InterB_b()

InterA_a()

InterC_c()

 

¾Õ¿¡¼­ ³ª¿Â ¿¹Á¦¿¡ Object Ŭ·¡½º¿Í ÀÎÅÍÆäÀ̽º¸¦ µ¿½Ã¿¡ »ó¼ÓÇϰí ÀÖ½À´Ï´Ù. À̰ÍÀº ¸ðµç Ŭ·¡½º°¡ Object Ŭ·¡½º·ÎºÎÅÍ »ó¼Ó ¹Þ´Â´Ù´Â Áõ°ÅÀÔ´Ï´Ù. ±×·¯°í º¸¸é ÀÎÅÍÆäÀ̽º¿Í Ãß»óŬ·¡½º, Ŭ·¡½º ¸ðµÎ »çÃ̰£À̶ó°í ¸»ÇÒ ¼ö ÀÖ½À´Ï´Ù. Ãß»óŬ·¡½º´Â ´ç¿¬È÷ Ŭ·¡½º¶ó°í ÇßÀ¸´Ï Ŭ·¡½ºÀ̰í¿ä, ÀÎÅÍÆäÀ̽º´Â Ãß»óŬ·¡½ºÀÌÁö¸¸ º¸´Ù ƯÀÌÇÏ°Ô ¸ðµç ¸â¹öÀÇ ¸öü°¡ ¾ø´Â Ãà¾àµÈ ÇüÅÂÀÇ Å¬·¡½ºÀÔ´Ï´Ù. ±×·¸´Ù¸é MultiInheritanse Ŭ·¡½ºÀÇ °æ¿ì¿¡´Â InterA, InterB, InterC 3°³ÀÇ ÀÎÅÍÆäÀ̽º¿Í Object Ŭ·¡½º µî ¸ðµÎ 4°³¸¦ »ó¼Ó ¹Þ°í ÀÖ½À´Ï´Ù.

 

±×¸² 5-4 ÀÎÅÍÆäÀ̽ºÀÇ Áߺ¹»ó¼Ó

 

±×¸²¿¡¼­¿Í °°ÀÌ MultiInheritance Ŭ·¡½º´Â Áߺ¹»ó¼ÓÀÇ È¿°ú¸¦ º¸°í ÀÖ½À´Ï´Ù. ÀÎÅÍÆäÀ̽ºµµ Ŭ·¡½ºÀÇ ÇÑ Á¾·ùÀ̱⠶§¹®¿¡ Object Ŭ·¡½º¿Í ÀÎÅÍÆäÀ̽ºÀÇ Áߺ¹»ó¼Ó °³³äÀÌ Àû¿ëµÇ¸ç, ÀÎÅÍÆäÀ̽º ÀÚü´Â ¾Æ¹öÁöÀÇ Áߺ¹»ó¼ÓÀÇ ¸ðÈ£¼ºÀ» ¾î´À Á¤µµ ÇØ°áÇϰí Àֱ⵵ ÇÕ´Ï´Ù. ±×¸®°í Ŭ·¡½º´Â ´Ü Çϳª¸¸À» »ó¼ÓÇÒ ¼ö ÀÖÁö¸¸ ÀÎÅÍÆäÀ̽º´Â ¿©·¯ °³¸¦ »ó¼ÓÇØ¼­ »ç¿ëÇÒ ¼ö Àֱ⠶§¹®¿¡ Áߺ¹ »ó¼ÓÀÇ °³³äÀÌ ÇÊ¿äÇÒ °æ¿ì ÀÎÅÍÆäÀ̽º¸¦ ¸¹ÀÌ »ç¿ëÇϰí ÀÖ½À´Ï´Ù.

 

¾ÕÀÇ ¿¹Á¦´Â dz¼ºÇÑ À̾߱⠰Ÿ®¸¦ Á¦°øÇÕ´Ï´Ù. Á¦ÀÏ ¸ÕÀú ÀÎÅÍÆäÀ̽º°¡ ÀÎÅÍÆäÀ̽º¸¦ »ó¼ÓÇÏ´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù. º¸ÅëÀÇ Å¬·¡½º »ó¼Ó°ú ´Ù¸¥ Á¡ÀÌ ¾ø½À´Ï´Ù. ÀÌ·¸°Ô µÇ¸é ÀÎÅÍÆäÀ̽º InterC¿¡´Â a ¸Þ¼­µå¿Í c ¸Þ¼­µå, µÎ °³ÀÇ ¸Þ¼­µå ¼±¾ðÀÌ ÀÖ°Ô µÇ°ÚÁö¿ä. ÀÌ ÀÎÅÍÆäÀ̽º¸¦ »ó¼ÓÇϴ Ŭ·¡½º´Â µÎ °³ÀÇ ¸Þ¼­µå¸¦ ÀüºÎ ±¸ÇöÇØ¾ß ÇÏ´Â °ÍÀº ¹°·Ð À̰í¿ä.

 

n                 interface InterC : InterA

 

´ÙÀ½Àº ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇØ Áߺ¹ »ó¼ÓÇÏ´Â ÇüŸ¦ º¸¿© ÁÖ°í ÀÖ½À´Ï´Ù. ¾Æ·¡¿Í °°ÀÌ ¿©·¯ °³ÀÇ ÀÎÅÍÆäÀ̽º¸¦ µ¿½Ã¿¡ »ó¼ÓÇÏ·Á¸é ÄÞ¸¶·Î ±¸ºÐÇØ¼­ ³ª¿­ÇØÁÖ¸é µË´Ï´Ù. ´Ù¸¸, ÁÖÀÇÇÏ½Ç Á¡Àº Ŭ·¡½º¿Í °°ÀÌ »ó¼ÓÀ» ÇÏ´Â °æ¿ì¿¡´Â ¹Ýµå½Ã Ŭ·¡½º¸íÀ» Á¦ÀÏ ¾Õ¿¡ ¸í½ÃÇØ¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù.

 

n                 class MultiInheritance : Object, InterB, InterC

 

´«½ä¹Ì°¡ ÀÖ´Â ºÐµéÀº ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇϴ Ŭ·¡½º¿¡¼­ ÀÌ»óÇÑ Á¡À» ¹ß°ßÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. ¹Ù·Î ÀÎÅÍÆäÀ̽ºÀÇ Ãß»ó¸Þ¼­µå¸¦ ±¸ÇöÇÏ´Â ´ÙÀ½ÀÇ ÄÚµåµéÀÔ´Ï´Ù.

 

n                 public void a() { ¡¦ }

n                 public void b() { ¡¦ }

n                 public void c() { ¡¦ }

 

Á¶±Ý ÀÌ»óÇÏÁö ¾ÊÀ¸¼¼¿ä. ¿Ö Á¢±ÙÁöÁ¤ÀÚ°¡ publicÀ̸ç, ¹ÝȯÇüÀº void·Î ¸Å°³º¯¼ö ¾øÀÌ ±¸ÇöÀÌ µÇ´ÂÁö ¸»ÀÔ´Ï´Ù. ¸»ÀÌ ³ª¿Â ±è¿¡ Á»´õ ÀÚ¼¼È÷ ¾Ë¾Æº¸°í °¡°Ú½À´Ï´Ù.

 

¸Þ¼­µå ±¸ÇöÀÇ ¹ýÄ¢

ÀÎÅÍÆäÀ̽º¸¦ »ó¼Ó ¹Þ¾Æ ÆÄ»ýŬ·¡½º¿¡¼­ ±¸ÇöÇÒ ¶§´Â ±¸Çö ¸Þ¼­µåÀÇ ÇüÅ¿¡ ÁÖÀÇÇØ¾ß ÇÕ´Ï´Ù. ¹Ýµå½Ã ÀÎÅÍÆäÀ̽º¿¡¼­ÀÇ ¸Þ¼­µå Çü½Ä°ú ±¸ÇöµÇ´Â Ŭ·¡½º¿¡¼­ÀÇ ¸Þ¼­µå Çü½ÄÀÌ µ¿ÀÏÇØ¾ß ÇÕ´Ï´Ù. ¸Þ¼­µåÀÇ ÇüÅ´ Á¢±ÙÁöÁ¤ÀÚ, ¹ÝȯÇü, ¸Þ¼­µå À̸§, ¸Å°³º¯¼öÀÇ Çü°ú °³¼ö·Î ³ªÅ¸³¯ ¼ö ÀÖ½À´Ï´Ù.

 

¸ÕÀú Á¢±ÙÁöÁ¤ÀÚ°¡ publicÀ¸·Î ¼±¾ðµÈ ÀÌÀ¯´Â °£´ÜÇÕ´Ï´Ù. ÀÎÅÍÆäÀ̽º ¸â¹öÀÇ Á¢±ÙÁöÁ¤ÀÚ´Â º°´Ù¸¥ ¸í½Ã°¡ ¾øÀ¸¸é publicÀ¸·Î µÈ´Ù°í ¾Õ¿¡¼­ ¸»¾¸ µå·È´Âµ¥ ±â¾ï ³ª½Ã´ÂÁö¿ä. ±×·¸±â ¶§¹®¿¡ ±¸Çö Ŭ·¡½º¿¡¼­µµ ÀÌ¿Í ÀÏÄ¡ ½Ã۱â À§ÇØ publicÀ» ¸í½ÃÇÑ °ÍÀÔ´Ï´Ù. Ŭ·¡½ºÀÇ ¸â¹ö´Â Á¢±ÙÁöÁ¤ÀÚ°¡ ¸í½ÃµÇÁö ¾ÊÀ¸¸é privateÀ¸·Î ÁöÁ¤ÀÌ µÇ°Åµç¿ä.

 

¶ÇÇÑ ÀÎÅÍÆäÀ̽ºÀÇ Ãß»ó¸Þ¼­µå´Â ¹ÝȯÇüÀÌ ¾ø´Â void·Î ¼±¾ðÀÌ µÇ¾ú±â ¶§¹®¿¡ Ŭ·¡½º¿¡¼­µµ void·Î ÇØÁØ °ÍÀÔ´Ï´Ù. ¸Å°³º¯¼öµµ °°Àº ¸Æ¶ôÀÔ´Ï´Ù. ¸¸¾à ÀÎÅÍÆäÀ̽º¿¡¼­ ¹ÝȯÇüÀ» int·Î Çß´Ù¸é Ŭ·¡½º¿¡¼­µµ int·Î ÇØÁÖ¾î¾ß ÇÒ °ÍÀ̰í, ¸Å°³º¯¼ö·Î ¹«¾ùÀΰ¡¸¦ ³Ñ±æ ¶§¿¡´Â ¸Å°³º¯¼öÀÇ Çü°ú °³¼ö±îÁö µ¿ÀÏÇØ¾ß ÇÕ´Ï´Ù. ¸Þ¼­µåÀÇ À̸§ÀÌ °°¾Æ¾ß µÈ´Ù´Â °ÍÀº ´ç¿¬ÇÑ ¼Ò¸®ÀÔ´Ï´Ù.

 

Áߺ¹ »ó¼ÓÇÒ ¶§ ÁÖÀÇÇØ¾ß ÇÒ Á¡ÀÌ ¶Ç Çϳª ÀÖ½À´Ï´Ù. ¹Ù·Î »ó¼ÓµÇ´Â ÀÎÅÍÆäÀ̽ºµéÀÇ ¸â¹ö À̸§ÀÌ µ¿ÀÏÇÒ °æ¿ì,