¹«½ÃÇϱâ´Â ÀÏÁ¾ÀÇ ¸Þ¼µå ÀçÁ¤ÀÇ Áï, 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 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 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 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°ÀÇ ÀúÀÚ:ÃÖ¿µ°ü |