¼Ò¼³°°ÀºC#  Á¦4°­ÀÇ C#ÀÇ °´Ã¼ÁöÇâ  12. ¸Þ¼­µå ÀçÁ¤ÀÇ(Overriding)  

 

 

4.12 ¸Þ¼­µå ÀçÁ¤ÀÇ(Overriding)

 

¹«½ÃÇϱâ´Â ÀÏÁ¾ÀÇ ¸Þ¼­µå ÀçÁ¤ÀÇ Áï, OverridingÀ̶ó°í ºÎ¸¨´Ï´Ù. ¿©·¯ºÐÀÌ »óÀ§Å¬·¡½º¿¡¼­ Á¸ÀçÇÏ´Â ¸Þ¼­µå¸¦ ¾Æ¹«·± Á¶Ä¡ ¾øÀÌ ÀçÁ¤ÀÇÇÑ´Ù¸é ¿¡·¯¸¦ ¹ß»ýÇÒ °ÍÀÔ´Ï´Ù. ÀÌ ¶§ ¸Þ¼­µå¸¦ ÀçÁ¤ÀÇÇÏ·Á°í ÇÒ ¶§ new Ű¿öµå¸¦ ÀÌ¿ëÇÏ¿© »óÀ§Å¬·¡½ºÀÇ ¸Þ¼­µå¸¦ ¹«½Ã Çß½À´Ï´Ù.

 

¢Ã ¸Þ¼­µå ÀçÁ¤ÀÇÀÇ Á¾·ù

q                new Ű¿öµå¸¦ ÀÌ¿ëÇÑ ÀçÁ¤ÀÇ

q                virtual override Ű¿öµå¸¦ ÀÌ¿ëÇÑ ÀçÁ¤ÀÇ

 

new¸¦ ÀÌ¿ëÇÑ ¸Þ¼­µå ÀçÁ¤ÀÇ

¹«Á¶°ÇÀûÀÎ ÀçÁ¤ÀÇ´Â ºÒ°¡´ÉÇϱ⠶§¹®¿¡ new Ű¿öµå¸¦ »ç¿ëÇÏ¿© ¹«½ÃÇϰڴٰí Ç¥½Ã¸¦ ÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù. new ¸¦ ÀÌ¿ëÇÏ¿© ÀçÁ¤ÀÇÇÏ´Â ¹æ¹ýÀ̿ܿ¡ °¡»ó¸Þ¼­µå(Virtual Method)¸¦ ÀÌ¿ëÇÑ ÀçÁ¤ÀÇÀÇ ±â¹ýÀÌ Á¸ÀçÇÕ´Ï´Ù. new¸¦ ÀÌ¿ëÇÑ ÀçÁ¤ÀÇ¿Í virtualÀ» ÀÌ¿ëÇÑ ÀçÁ¤ÀÇ´Â È®¿¬È÷ ´Ù¸£°Ô ³ªÅ¸³ª°í ÀÖ½À´Ï´Ù. new Ű¿öµå·Î ¸Þ¼­µå¸¦ ÀçÁ¤ÀÇÇÏ´Â °ÍºÎÅÍ ¸ÕÀú »ìÆìº¸°Ú½À´Ï´Ù. ´ÙÀ½ÀÇ ¿¹¹®À» Çѹø »ìÆìº¸½ÃÁÒ.

 

&

SimpleNew.cs

Ü Upcasting¿¡¼­ÀÇ ¸Þ¼­µå ¹«½ÃÇϱâ

using System;

class Base{

         public void MethodA() {

               Console.WriteLine("Base Method()");

         }

}

class SimpleNew: Base{

         new public void MethodA() {

               Console.WriteLine("SimpleNew Method()");

         }                                                   

         public static void Main(){

               SimpleNew m = new SimpleNew();

                    m.MethodA();//SimpleNewÀÇ ¸Þ¼­µå È£Ãâ

                                                  

            Base b = m;

                    b.MethodA();//Base ¸Þ¼­µå È£Ãâ

         }

}

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

C:\C#Example\04>SimpleNew

SimpleNew Method()

Base Method()

 

new Ű¿öµå¸¦ »ç¿ëÇÏ¿© ÇÏÀ§Å¬·¡½º¿¡¼­ »óÀ§Å¬·¡½ºÀÇ ¸Þ¼­µå¸¦ ¹«½ÃÇßÀ» ¶§ SimpleNew Ŭ·¡½º´Â »óÀ§Å¬·¡½ºÀÇ ¸Þ¼­µå¸¦ ¹«½ÃÇϰí ÀÚ½ÅÀÇ ¸Þ¼­µå¸¦ »ç¿ëÇÏ°Ô µË´Ï´Ù.

 

n                  SimpleNew m = new SimpleNew();

n                  m.MethodA(); //SimpleNewÀÇ ¸Þ¼­µå È£Ãâ

 

À§ÀÇ ¿¹Á¦¿¡¼­ Base b = m À̶ó´Â ºÎºÐÀ» º¼ ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í ÀνºÅϽº b¸¦ ÀÌ¿ëÇÏ¿© MethodA() ¸Þ¼­µå¸¦ È£ÃâÇϰí ÀÖ½À´Ï´Ù.

 

n                  Base b = m;

n                  b.MethodA();//Base ¸Þ¼­µå È£Ãâ

 

Á¤È®ÇÏ°Ô Çѹø µûÁ® º¸µµ·Ï ÇϰڽÀ´Ï´Ù. ÀÏ´Ü Base b´Â »óÀ§Å¬·¡½ºÀÔ´Ï´Ù. ±×¸®°í mÀº ÇÏÀ§Å¬·¡½ºÀÇ ÀνºÅϽºÀÔ´Ï´Ù. Áï, ÇÏÀ§Å¬·¡½ºÀÇ ÀνºÅϽº¸¦ »óÀ§Å¬·¡½ºÀÇ ÀνºÅϽº·Î Çüº¯È¯À» Çß½À´Ï´Ù. ÀÌ·¯ÇÑ Çüº¯È¯À» ¾÷ij½ºÆÃ(Upcasting)À̶ó°í ºÎ¸¨´Ï´Ù. ÀÌ ¶§ b´Â ´©±¸ÀÇ ¸Þ¼­µå¸¦ È£ÃâÇÒ±î¿ä? ´äÀº ´ÙÀ½°ú °°½À´Ï´Ù.

 

¢Ã new Ű¿öµå¸¦ ÀÌ¿ëÇÏ¿© ¸Þ¼­µå¸¦ ÀçÁ¤ÀÇÇÑ ÈÄ ¾÷ij½ºÆÃ ÇßÀ» ¶§

q                ¾÷ij½ºÆÃ µÇ¾úÀ» ¶§ »óÀ§Å¬·¡½º´Â »óÀ§Å¬·¡½º³»ÀÇ ¸Þ¼­µå¸¸À» È£ÃâÇÑ´Ù.

 

ÀÌ ºÎºÐÀÇ ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº 5ÀåÀÇ ¾÷ij½ºÆÃ¿¡¼­ ÀÚ¼¼È÷ ´Ù·çµµ·Ï ÇϰڽÀ´Ï´Ù. ¿©±â¿¡¼­ ²À ±â¾ïÇØ¾ß ÇÏ´Â °ÍÀº new Ű¿öµå¸¦ ÀÌ¿ëÇÏ¿© ¸Þ¼­µå¸¦ ÀçÁ¤ÀÇ ÇÑ ÈÄ ¾÷ij½ºÆÃÀ» ÇßÀ» ¶§ »óÀ§Å¬·¡½ºÀÇ ÂüÁ¶º¯¼ö·Î´Â »óÀ§Å¬·¡½º ³»ÀÇ ¸Þ¼­µå¸¸À» È£ÃâÇÑ´Ù´Â °ÍÀÔ´Ï´Ù.

 

virtualÀ» ÀÌ¿ëÇÑ ¸Þ¼­µå ÀçÁ¤ÀÇ

new¸¦ ÀÌ¿ëÇÏ¿© ¸Þ¼­µå¸¦ ÀçÁ¤ÀÇ ÇÏ´Â °Í°ú ¿Ïº®ÇÏ°Ô »ó¹ÝµÇ´Â °æ¿ì°¡ Á¸ÀçÇϴµ¥ À̰ÍÀº vitaul Ű¿öµå¸¦ ÀÌ¿ëÇÏ¿© ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½Àº À§ÀÇ ¿¹Á¦¸¦ virtualÀ» ÀÌ¿ëÇÏ¿© ´Ù½Ã ±¸ÇöÇÑ ¿¹Á¦ÀÔ´Ï´Ù.

 

&

SimpleVirtual.cs

Ü °¡»ó¸Þ¼­µåÀÇ ±¸Çö

using System;

class Base{

           virtual public void MethodA() {

                   Console.WriteLine("Base Method()");

           }

}

class SimpleVirtual : Base{

           override public void MethodA() {

                   Console.WriteLine("SimpleVirtual Method()");

           }                                                   

           public static void Main(){

                   SimpleVirtual m = new SimpleVirtual();

                   m.MethodA();

                                                  

                   Base b = m;

                         b.MethodA(); // SimpleVirtualÀÇ ¸Þ¼­µå È£Ãâ

           }

}

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

C:\C#Example\04>SimpleVirtual

SimpleVirtual Method()

SimpleVirtual Method()

 

new Ű¿öµå¸¦ ±¸ÇöÇÏ¿© ¹«½ÃÇϱ⸦ ÇÑ ¿¹Á¦¿Í µ¿ÀÏÇÑ ¿¹Á¦ÀÔ´Ï´Ù. ÇÏÁö¸¸ ÀÌ ¿¹Á¦¿¡¼­´Â »óÀ§Å¬·¡½º¿¡ virtualÀ̶ó´Â Ű¿öµå¸¦ ºÙÀ̰í ÀÖ½À´Ï´Ù. À̰ÍÀº °¡»ó¸Þ¼­µå·Î ÀÌ¿ëÇϰڴٴ ǥ½ÃÀÔ´Ï´Ù. ±×¸®°í °¡»ó¸Þ¼­µå¸¦ ÀçÁ¤ÀÇÇÒ ¶§¿¡´Â override Ű¿öµå¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ·¸°Ô ÇßÀ» ¶§ new Ű¿öµå¸¦ »ç¿ëÇÏ¿© ÀçÁ¤ÀÇÇÑ °Í°ú »ó¹ÝµÈ °á°ú¸¦ °¡Á®¿À°Ô µË´Ï´Ù.

 

n                  Base b = m;

n                  b.MethodA(); //virtual ¸Þ¼­µåÀÇ È£ÃâÇÏÀ§Å¬·¡½ºÀÇ ¸Þ¼­µå°¡ È£Ãâ

 

b°¡ È£ÃâÇÏ´Â MethodA() ¸Þ¼­µå´Â ÇÏÀ§Å¬·¡½ºÀÇ ¸Þ¼­µåÀÔ´Ï´Ù. °á°úÀûÀ¸·Î »óÀ§Å¬·¡½ºÀÇ À̸§À¸·Î ÇÏÀ§Å¬·¡½ºÀÇ ¸Þ¼­µå¸¦ È£ÃâÇÏ´Â °ÍÀÌ µË´Ï´Ù. ¾Æ¹öÁöÀÇ À̸§À¸·Î ¾ÆµéÀ» È£ÃâÇÑ´Ù°í º¼ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½ÀÇ ¿¹Á¦´Â new ¿Í virtualÀ» µ¿½Ã¿¡ »ç¿ëÇÑ ¿¹ÀÔ´Ï´Ù. new¿Í virtualÀÇ Â÷À̸¦ °¨»óÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.

 

&

Together.cs

Ü new¿Í override¸¦ µ¿½Ã¿¡ ±¸ÇöÇÑ ¿¹Á¦

using System;

class Base{

        public void FuncA() { Console.WriteLine("Base.FuncA"); }

        public virtual void FuncB() { Console.WriteLine("Base.FuncB"); }

}

class Derived: Base{

        new public void FuncA() { Console.WriteLine("Derived.FuncA"); }

        public override void FuncB() { Console.WriteLine("Derived.FuncB"); }

}

class Together{

           public static void Main() {

                 Derived d = new Derived();

                 Base a  = d;

                       d.FuncA(); //new¸¦ ÀÌ¿ëÇÏ¿© ÀçÁ¤ÀÇ

                       a.FuncA(); //new¸¦ ÀÌ¿ëÇÏ¿© ÀçÁ¤ÀÇ

                       d.FuncB(); //virtual°ú override¸¦ ÀÌ¿ëÇÏ¿© ÀçÁ¤ÀÇ

                       a.FuncB(); //virtual°ú override¸¦ ÀÌ¿ëÇÏ¿© ÀçÁ¤ÀÇ

        }

}

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

C:\C#Example\04>Together

Derived.FuncA

Base.FuncA

Derived.FuncB

Derived.FuncB

 

¢Ã virtual, override, newÀÇ °ü°è

q                vitrual : ÇÏÀ§Å¬·¡½º¿¡¼­ ÀçÁ¤ÀÇÇØ¼­ »ç¿ëÇÒ °ÍÀ» Ç¥½Ã

q                override : »óÀ§Å¬·¡½º¿¡¼­ virtual·Î Ç¥½ÃµÈ ¸Þ¼­µå¸¦ ÀçÁ¤ÀÇÇÒ ¶§ »ç¿ë

q                new : »óÀ§Å¬·¡½ºÀÇ ¸Þ¼­µå¸¦ ¹«½ÃÇÒ ¶§ »ç¿ë

new¸¦ ÀÌ¿ëÇÑ ¾Æ¹öÁö ¹«½ÃÀÇ ¹æ¹ýÀº ±×·¸°Ô ¸¹ÀÌ ¾²ÀÌÁö ¾Ê´Â ÇÁ·Î±×·¡¹Ö ±â¹ýÀÔ´Ï´Ù. ÇÏÁö¸¸ virtual, override¸¦ ÅëÇÑ °¡»ó ¸Þ¼­µåÀÇ »ç¿ëÀº ÇÁ·Î±×·¥ÀÇ µðÀÚÀÎ Ãø¸éÀ̳ª ½ÇÇàÀûÀÎ Ãø¸é¿¡¼­µµ ºó¹øÈ÷ »ç¿ëµÇ°í ÀÖ½À´Ï´Ù. »óÀ§ Ŭ·¡½º·Î ÇÏÀ§ Ŭ·¡½º¸¦ ij½ºÆÃÇÏ¿© ´Ù¾çÇÑ ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ´Â °¡»ó ¸Þ¼­µåÀÇ »ç¿ëÀº °´Ã¼ÁöÇâ¾ð¾îÀÇ ÇÙ½ÉÀÎ ´ÙÇü¼º(polymorphism)ÀÇ ±¸Çö¿¡ À־ ¸Å¿ì Áß¿äÇÑ ÇѰ¡Áö ¹æ¹ýÀÔ´Ï´Ù.



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