¼Ò¼³°°ÀºC#  Á¦5°­ÀÇ C#ÀÇ ´ÙÇü¼º  01. ´ÙÇü¼ºÀ̶õ  

 

 

5.1 ´ÙÇü¼ºÀ̶õ?

 

´ÙÇü¼º(Polymorphism)À̶õ, ÇѰ¡Áö·Î ¿©·¯ °¡ÁöÀÇ ÀÏÀ» ÇÑ´Ù´Â ¶æÀÔ´Ï´Ù. ÇÁ·Î±×·¥¿¡¼­ ÇϳªÀÇ ÇüÅ·Π¿©·¯ °¡Áö ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Ù¸é À̰ÍÀÌ ¹Ù·Î ´ÙÇü¼ºÀÇ ¿ø ¶æ ±×´ë·ÎÀÔ´Ï´Ù. C#¿¡¼­ ÀÌ·¯ÇÑ Çö»óÀº ¾ÆÁÖ ¸¹Àº °÷¿¡¼­ ³ªÅ¸³³´Ï´Ù. ¿À¹ö·Îµù(Overloading) ¸Þ¼­µå´Â ÀÌ·¯ÇÑ ´ÙÇü¼ºÀÇ ¿ø¸®¸¦ Àß ¼³¸íÇØ ÁÖ°í ÀÖ½À´Ï´Ù. ÇϳªÀÇ ¸Þ¼­µåÀÇ À̸§À» ÀÌ¿ëÇÏ¿© ¿©·¯ °³ÀÇ ¸Þ¼­µå¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀÌ ¹Ù·Î ¿À¹ö·ÎµùÀÔ´Ï´Ù. ÇϳªÀÇ ¸Þ¼­µå À̸§À¸·Î ¿©·¯ °¡Áö ÀÛ¾÷À» µ¿½Ã¿¡ ÇÒ ¼ö Àִٴ Ư¼ºÀÌ ÀÖÀ¸´Ï ´ÙÇü¼ºÀÇ ¿ø¸®¸¦ Æ÷ÇÔÇÑ´Ù°í ÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

¢Ã ´ÙÇü¼º(Polymorphism)À̶õ?

q                ÇϳªÀÇ ÇüÅ·Π¿©·¯ °¡Áö ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Â ¼ºÁú

 

´ÙÇü¼ºÀÇ ¼ºÁúÀÌ °¡Àå Àß ³ªÅ¸³ª´Â °÷Àº »ó¼Ó(Inheritance)ÀÔ´Ï´Ù. ¹°·Ð, ´Ù¸¥ °÷¿¡¼­µµ ÀÌ·¯ÇÑ ´ÙÇü¼ºÀº Ç¥ÃâµÇ°í ÀÖÁö¸¸ ¿©·¯ºÐÀÌ ½±°Ô Á¢ÇÒ ¼ö ÀÖ´Â °÷Àº ¹Ù·Î »ó¼Ó¿¡¼­ ³ªÅ¸³ª´Â °´Ã¼ÁöÇâÀÇ ±â¹ý¿¡¼­ ½±°Ô ãÀ» ¼ö ÀÖ½À´Ï´Ù. ´ÙÇü¼ºÀÇ ¿¹¸¦ ¾Ë¾Æº¸µµ·Ï ÇϰڽÀ´Ï´Ù.

 

¢Ã ´ÙÇü¼º(Polymorphism)À̶õ ÀÌ Àû¿ë µÇ´Â °÷

q                ¿À¹ö·Îµù(Overloading)

q                ¿À¹ö¶óÀ̵ù(Overriding)

q                ¾÷ij½ºÆÃ(Upcasting)

q                ´Ù¿îij½ºÆÃ(Downcasting)

q                Ãß»óŬ·¡½º(Abstract Class) ÀÇ »ó¼Ó °ü°è

q                ÀÎÅÍÆäÀ̽º(Interface)ÀÇ »ó¼Ó °ü°è

 

À̵é Áß¿¡¼­µµ ¾÷ij½ºÆÃ(Upcasting) °³³äÀÌ ´ÙÇü¼ºÀ» ´ëÇ¥ÇÑ´Ù°í À̾߱â ÇÕ´Ï´Ù. ¿Ö³ÄÇÏ¸é ¾÷ij½ºÆÃ(Upcasting)¿¡¼­ ´Ù¾çÇÑ ÇÁ·Î±×·¥À» ÇÒ ¼ö ÀÖ°Ô µµ¿Í ÁÖ´Â ºÎºÐÀÌ ¸¹±â ¶§¹®ÀÏ °ÍÀÔ´Ï´Ù.

 

¾÷ij½ºÆÃ(Upcasting)À̶õ »óÀ§Å¬·¡½º·Î ÇÏÀ§Å¬·¡½º¸¦ ij½ºÆÃÇÏ´Â ´ÙÇü¼ºÀÇ ÇÙ½ÉÀûÀÎ ºÎºÐÀÔ´Ï´Ù. ¾÷ij½ºÆÃÀ» ¾Ë°íÀÚ ÇÑ´Ù¸é »ó¼Ó(Inheritance)Àº ¹«Á¶°ÇÀûÀ¸·Î ¾Ë¾Æ¾ß µÇ°í ¿À¹ö¶óÀ̵ù(Overriding)°ú ¾÷ij½ºÆÃ(Upcasting)Àº Á÷Á¢ÀûÀ¸·Î °ü·Ã ÀÖÀ¸´Ï ¹Ýµå½Ã ¼÷Áö ÇØ¾ß¸¸ ÇÏ´Â °´Ã¼ÁöÇâ °³³äÀÔ´Ï´Ù. ±×¸®°í Ãß»óŬ·¡½º(Abstract Class)¿Í ÀÎÅÍÆäÀ̽º(Interface)¿¡¼­ ³ªÅ¸³ª´Â »ó¼Ó°ú ±¸ÇöÀÇ ¹®Á¦µµ ÀÌ ¾÷ij½ºÆÃ°ú Á÷Á¢ °ü·ÃÀÌ ÀÖ½À´Ï´Ù. ¾Ë°í º¸¸é ¾÷ij½ºÆÃÀº ´ëºÎºÐÀÇ °´Ã¼ÁöÇâ °³³äµéÀ» ¸ð¾ÆµÐ °Í °°Àº ´À³¦ÀÌ °­ÇÕ´Ï´Ù. ±×·¡¼­ ¾÷ij½ºÆÃÀÌ C#ÀÇ ´ÙÇü¼º(Polymorphism)À» ´ëÇ¥ÇÑ´Ù°í À̾߱⸦ ÇÏ´Â °Í °°½À´Ï´Ù.

 

¿ì¸®´Â »ó¼ÓºÎºÐÀ» °øºÎÇϸ鼭 ¾÷ij½ºÆÃ¿¡ ´ëÇØ¼­ ¹è¿ü½À´Ï´Ù. »ó¼Ó¿¡¼­  ¡®¾÷ij½ºÆÃ(Upcasting)Àº ÀÌ·±°Å¾ß!¡¯ ¶ó´Â Á¤µµ¹Û¿¡´Â ¾ð±ÞÇÏÁö ¾Ê¾Ò½À´Ï´Ù. ¾÷ij½ºÆÃÀÌ µµ´ëü ¾îµð¿¡ ÁÁÀºÁöµµ ¸ð¸£°í ±×³É ±×·¸°Ô ÇÁ·Î±×·¥ ÇÏ¸é µÈ´Ù´Â ½ÄÀ¸·Î ´ëÃæ ÇÁ·Î±×·¥À» ÇÏ´Â °æ¿ì°¡ ¸¹½À´Ï´Ù.

 

¶ÇÇÑ, C#¿¡¼­´Â ´Ù¸¥ ¾ð¾î¿¡¼­ º¸Áö ¸øÇÑ Boxing°ú UnBoxingÀÇ °³³äÀÌ µîÀåÇÕ´Ï´Ù. °ªÅ¸ÀÔ(Value Type)°ú ÂüÁ¶Å¸ÀÔ(Reference Type)ÀÌ ¼­·Î Çü º¯È¯À» °¡´ÉÇÏ°Ô ¸¸µé¾î ÁÖ´Â ±â¹ýÀÔ´Ï´Ù. °ªÅ¸ÀÔÀÌ ÂüÁ¶Å¸ÀÔÀ¸·Î ÂüÁ¶Å¸ÀÔÀÌ °ªÅ¸ÀÔÀ¸·Î º¯È¯ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀº ´ÙÇü¼ºÀÇ ºÎ·ù¿¡ ¼ÓÇÑ´Ù°í º¼ ¼ö ÀÖ½À´Ï´Ù.

 

 

¢Ã ´ÙÇü¼ºÀ» Áö¿øÇϱâ À§ÇÑ µµ±¸

q                Ãß»óŬ·¡½º(Abstract Class)

q                ÀÎÅÍÆäÀ̽º(Interface)

q                ¾÷ij½ºÆÃ(Upcasting)°ú ´Ù¿îij½ºÆÃ(Downcasting)

q                Boxing, UnBoxing

q                Delegate

 

  ÀÌ Àå¿¡¼­ ÇÙ½ÉÀûÀ¸·Î ´Ù·ç°í ÀÖ´Â Ãß»óŬ·¡½º(Abstract Class), ÀÎÅÍÆäÀ̽º(Interface), ¾÷ij½ºÆÃ(Upcasting)°ú ´Ù¿îij½ºÆÃ(Downcasting), ¹Ú½Ì(Boxing)°ú ¾ð¹Ú½Ì(UnBoxing), µ¨¸®°ÔÀÌÆ®(Delegate) µîÀº ¸ðµÎ ´ÙÇü¼º(Polymorphism)À» Áö¿øÇϱâ À§ÇÑ °­·ÂÇÑ µµ±¸ÀÔ´Ï´Ù. À̵éÀ» ºÐ¼®ÇØ ³ª°¡¸é¼­ C#¿¡¼­ »ç¿ëµÇ´Â ´ÙÇü¼º(Polymorphism)¿¡ ´ëÇÑ ´À³¦À» ã¾Æ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.



jabookÀúÀÚ¸íÇÔ