¼Ò¼³°°ÀºC#  Á¦5°­ÀÇ C#ÀÇ ´ÙÇü¼º  07. Ãß»óŬ·¡½º¶õ?  

 

 

5.7 Ãß»óŬ·¡½º¶õ?

 

Ãß»óŬ·¡½º(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°­ÀÇ
ÀúÀÚ:ÃÖ¿µ°ü