Ãß»óŬ·¡½º(Abstract Class)´Â ¹Ì¿Ï¼º Ŭ·¡½ºÀÔ´Ï´Ù. ¿ÏÀüÇÑ Å¬·¡½º°¡ ¾Æ´Ï±â ¶§¹®¿¡ °´Ã¼¸¦ »ý¼ºÇÒ ¼ö ¾ø½À´Ï´Ù. Ãß»óŬ·¡½º°¡ µÉ ¼ö ÀÖ´Â °æ¿ì´Â ´ÙÀ½ 2°¡Áö °æ¿ìÀÔ´Ï´Ù.
1 Ãß»óŬ·¡½º°¡ µÇ´Â ¹æ¹ý
n ¸öü¾ø´Â ¸Þ¼µå¸¦ Çϳª¶óµµ Æ÷ÇÔÇϰí Àִ Ŭ·¡½º
n ¸öü¾ø´Â ¸Þ¼µå¸¦ Æ÷ÇÔÇϰí ÀÖÁö ¾Ê´õ¶óµµ Ŭ·¡½º ¼±¾ðÇÒ ¶§ abstract Ű¿öµå¸¦ Æ÷ÇÔÇϰí ÀÖÀ» °æ¿ì
±×·±µ¥ ¿©±â¼ ¸öü¾ø´Â ¸Þ¼µå°¡ ¹«¾ùÀϱî¿ä? ¸öü¾ø´Â ¸Þ¼µå¶õ ¸Þ¼µåÀÇ ±¸ÇöºÎ°¡ ¾ø´Ù´Â ¶æÀÔ´Ï´Ù. Áï, ¸Þ¼µå ºí·°({})À» Æ÷ÇÔÇϰí ÀÖÁö ¾Ê°í ÇÁ·ÎÅäŸÀÔ(ProtoType)¸¸ Á¸ÀçÇÏ´Â ¸Þ¼µå¸¦ ¸»ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ¸Þ¼µå´Â ¹Ýµå½Ã abstract Ű¿öµå·Î ÀÚ½ÅÀÌ Ãß»ó¸Þ¼µå¶ó´Â °ÍÀ» ¾Ë·Á¾ß ÇÕ´Ï´Ù.
|
Ãß»ó¸Þ¼µåÀÇ ¼±¾ð ÇüÅ |
|
public abstract void F(); Ãß»ó¸Þ¼µå´Â ¹¬½ÃÀûÀ¸·Î virtual ¸Þ¼µåÀÌ´Ù. |
±×¸®°í Ãß»ó¸Þ¼µå¸¦ Æ÷ÇÔÇϰí ÀÖÀ¸¸é abstract Ű¿öµå¸¦ ÀÌ¿ëÇØ¼ Ŭ·¡½º Àڽŵµ Ãß»óŬ·¡½º¶ó´Â °ÍÀ» ¸í½ÃÇØ¾ß ÇÕ´Ï´Ù.
|
Ãß»óŬ·¡½ºÀÇ ¿¹1 |
|
abstract class Sample1 { public abstract void F(); } |
Ãß»ó¸Þ¼µå¸¦ Æ÷ÇÔÇϰí ÀÖÁö ¾Ê´õ¶óµµ abstract Ű¿öµå¸¸ Æ÷ÇÔÇϰí ÀÖ´Ù¸é ÀÏ´ÜÀº Ãß»óŬ·¡½º°¡ µË´Ï´Ù. ´ÙÀ½ÀÇ °æ¿ì´Â abstract Ű¿öµå¸¸ ¸í½ÃÇÑ ¿¹ÀÔ´Ï´Ù.
|
Ãß»óŬ·¡½ºÀÇ ¿¹2 |
|
abstract class Sample2 { public void G(){ } } |
ÀÌ·¯ÇÑ Ãß»óŬ·¡½ºÀÇ °¡Àå Å« Ư¡Àº ¿ÏÀüÇÑ Å¬·¡½º°¡ ¾Æ´Ï±â ¶§¹®¿¡ ¿ÏÀüÇÏ°Ô ±¸ÇöÀ» ÇØ¾ß¸¸ °´Ã¼¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿ÏÀüÇÏ°Ô ±¸ÇöÀ» Çϱâ À§Çؼ´Â ¸ÕÀú Ãß»óŬ·¡½º¸¦ »ó¼ÓÇÑ ÈÄ ¸ðµç Ãß»ó¸Þ¼µåµéÀ» ±¸ÇöÇßÀ» ¶§ °´Ã¼¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. À§ÀÇ ¿¹1ÀÇ °æ¿ì´Â Ãß»ó¸Þ¼µå F()¸¦ ±¸Çö ÇØ¾ß¸¸ ¿ÏÀüÇØÁö¸ç ¿¹2ÀÇ °æ¿ì´Â »ó¼Ó ÀÚü ¸¸À¸·Îµµ ¿ÏÀüÇØÁö´Â »óŰ¡ µË´Ï´Ù.
|
¢Ã Ãß»óŬ·¡½º(Abstract Class) |
|
q abstract Ű¿öµå¸¦ »ç¿ë q ¸öü¾ø´Â Ãß»ó¸Þ¼µå¸¦ Çϳª¶óµµ Æ÷ÇÔÇϰí ÀÖÀ¸¸é Ãß»óŬ·¡½º°¡ µÈ´Ù. q Ãß»óŬ·¡½º°¡ µÇ¸é ¹Ýµå½Ã abstract Ű¿öµå¸¦ ¸í½ÃÇØ¾ß ÇÑ´Ù. q Ŭ·¡½º¸¦ ¼±¾ðÇÒ ¶§ Ŭ·¡½º ¾Õ¿¡ abstract Ű¿öµå¸¦ »ç¿ëÇϸé Ãß»ó¸Þ¼µå¸¦ Æ÷ÇÔÇϰí ÀÖÁö ¾Ê¾Æµµ Ãß»óŬ·¡½º µÈ´Ù. q Ãß»óŬ·¡½º´Â °´Ã¼(ÀνºÅϽº)¸¦ »ý¼ºÇÒ ¼ö ¾ø´Ù. q Ãß»ó¸Þ¼µå´Â ¹¬½ÃÀûÀ¸·Î °¡»ó¸Þ¼µå(Virtual Method)°¡ µÈ´Ù. q Ãß»ó¸Þ¼µå´Â virtual Ű¿öµå¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù. |
Ãß»óŬ·¡½º´Â °´Ã¼°¡ °¡Áö´Â Ư¼ºµéÀ» Ãß»óÈ ½ÃÄÑ ³õ°í ±¸Ã¼ÀûÀÎ ±¸ÇöÀº ÀÌ Ãß»óŬ·¡½º¸¦ »ó¼Ó ¹Þ´Â ÆÄ»ýŬ·¡½º¿¡¼ Çϵµ·Ï ÇÏ´Â °ÍÀÔ´Ï´Ù. Ãß»óŬ·¡½º´Â ¹Ì¿Ï¼º Ŭ·¡½ºÀ̱⠶§¹®¿¡ ¾àÁ¡ÀÌ ÀÖ½À´Ï´Ù. ¿ÏÀüÇÑ Å¬·¡½º°¡ ¾Æ´Ï±â ¶§¹®¿¡ ÀÚüÀûÀ¸·Î Àý´ë °´Ã¼¸¦ »ý¼ºÇÏÁö ¸øÇÕ´Ï´Ù. ´ç¿¬ÇÑ °Í ¾Æ´Ï°Ú½À´Ï±î? ¿Ï¼ºµÇÁö ¾ÊÀº Ŭ·¡½ºÀÌ´Ï °´Ã¼¸¦ ¸¸µé ¼ö ¾ø´Ù´Â °ÍÀº ÀÌÄ¡¿¡ ÇÕ´çÇÕ´Ï´Ù. ±×·¸Áö¸¸ ¹«Á¶°Ç ºÙÀÌ´Â °ÍÀÌ ¾Æ´Ï°í Ãß»óŬ·¡½º º»·¡ÀÇ ÀÇ¹Ì ¾È¿¡¼, ±× ÀÚü·Î´Â ¹«¾ùÀΰ¡ ºÎÁ·ÇÏ¿© ¹Ýµå½Ã »ó¼ÓÀ» ¹Þ¾Æ ´õ ±¸ÇöÀ» ÇØ ÁÖ¾î¾ß ÇÑ´Ù°í ÇÒ ¶§ abstract Ű¿öµå¸¦ ºÙÀÌ´Â °ÍÀÔ´Ï´Ù. ´ÙÀ½ ¿¹Á¦¿¡¼ ÀÚ¼¼È÷ »ìÆìº¸ÁÒ.
|
& |
ShapeTest.cs |
Ü Ãß»óŬ·¡½ºÀÇ ¿¹ |
|
using System; public abstract class Shape{ public abstract void draw(); } public class Circle: Shape{//Ãß»óŬ·¡½ºÀÇ ±¸Çö public override void draw() { Console.WriteLine("¿øÀ» ±×¸³´Ï´Ù"); } } public class Rect: Shape{//Ãß»óŬ·¡½ºÀÇ ±¸Çö public override void draw() { Console.WriteLine("»ç°¢ÇüÀ» ±×¸³´Ï´Ù"); } } public class ShapeTest{ public static void Main(){ Circle cir = new Circle(); Rect rec = new Rect(); cir.draw();//¿ø±×¸®±â rec.draw();//»ç°¢Çü ±×¸®±â }//main }//class | ||
|
C:\C#Example\05>csc ShapeTest.cs C:\C#Example\05>ShapeTest ¿øÀ» ±×¸³´Ï´Ù »ç°¢ÇüÀ» ±×¸³´Ï´Ù | ||
Ãß»óŬ·¡½º Shape´Â ÇϳªÀÇ Ãß»ó¸Þ¼µå¸¦ Æ÷ÇÔÇϰí Àֱ⠶§¹®¿¡ Ãß»óŬ·¡½º°¡ µÇ¾ú½À´Ï´Ù.
n public abstract class Shape{
n public abstract void draw();
n }
µÎ°³ÀÇ Å¬·¡½º Circle°ú RecÀº draw() ¸Þ¼µå¸¦ ±¸ÇöÇ߱⠶§¹®¿¡ ÇϳªÀÇ ¿ÏÀüÇÑ Å¬·¡½º·Î½á °´Ã¼¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í °´Ã¼¸¦ »ý¼ºÇÑ ÈÄ draw() ¸Þ¼µå¸¦ È£ÃâÇϰí ÀÖ½À´Ï´Ù. draw() ¸Þ¼µå´Â ±× ÀÚü·Î °¡»ó¸Þ¼µåÀ̱⠶§¹®¿¡ »ó¼ÓÇÏ¿© ±¸ÇöÇÒ ¶§ override¸¦ »ç¿ëÇÏ¿© ¸Þ¼µå ÀçÁ¤ÀǸ¦ Çϰí ÀÖ½À´Ï´Ù.
| jabookÀúÀÚ¸íÇÔ |
|
Á¦¸ñ:¼Ò¼³°°ÀºC# Á¦5°ÀÇ ÀúÀÚ:ÃÖ¿µ°ü |