±Û¾´ÀÌ :ÀÓäÀÏ 1998³â 3¿ù 05ÀÏ 19:29:16
In Reply to: (!!) Why?? Procedure Language .vs. OOPL posted by Retiree on 1998³â 3¿ù 05ÀÏ 11:49:11:
¾È³çÇϼ¼¿ä.ÀÓäÀÏÀÔ´Ï´Ù.
À§¿¡ ÀÚ¼¼ÇÑ ¼³¸íÀÌ ÀÖÁö¸¸ Á¦°¡ Á¶±Ý¸¸ µ¡ºÙÀÌ°Ú½À´Ï´Ù.
PolymorphismÀº ¾Æ¸¶µµ Polymorphic array¿¡¼ °¡Àå Å« Áø°¡¸¦
¹ßÈÖÇÒ°Í °°±º¿ä.
Graphic Editor¿¡¼ ¸¸¾à µµÇüÀ» Á¤ÀÇÇÏ´Â Figure interface°¡
´ÙÀ½°ú °°ÀÌ ÀÖ´Ù°í °¡Á¤ÇսôÙ.
interface Figure{
public void draw();
}
±×¸®°í À̸¦ implementÇÒ classµéÀÌ Circle°ú RectangleÀÌ
ÀÖ´Ù°í ÇÏ°í ´ÙÀ½°ú °°ÀÌ Á¤ÀÇ µÇ¾ú´Ù°í ÇսôÙ.
class Circle implements Figure{
public Circle(..){//Constructor
...
}
public void draw(){
½ÇÁ¦±¸ÇöºÎ...
}
}
class Rectangle implements Figure{
public Rectangle(..){//Constructor
...
}
public void draw(){
½ÇÁ¦ ±¸ÇöºÎ...
}
}
¿©±â¼ Rectangle°ú CircleÀº °°Àº Figure¸¦ implement
ÇßÁö¸¸ ±× draw methodÀÇ ½ÇÁ¦ ±¸ÇöÀº ¿ÏÀüÈ÷ ´Ù¸£°ÚÁö¿ä.
À̶§ Graphic EditorÀÇ mainºÎ¿¡¼
Figure _polymorphic_array[]= new Figure[2];
·Î¼ ¹è¿À» ¼±¾ðÇÑÈÄ
Graphic Editor¿¡ ±×·ÁÁø °¢ µµÇüÀ» ¹è¿¿¡ Áý¾î³ÖÀ¸¸é
¾Æ¸¶µµ typeÀÌ ÀÏÄ¡Çϱ⶧¹®¿¡ ¹®Á¦ ¾øÀÌ µé¾î°¥°ÍÀÔ´Ï´Ù.
Circle c=new Circle(..);
Rectangle r=new Rectangle(..);
_polymorphic_array[0]=(Figure)c;
_polymorphic_array[1]=(Figure)r;
ÀÌ·±½ÄÀ¸·Î ÀúÀåÇÑÈÄ ¸·»ó °´Ã¼¸¦ ±×·Á¾ß Çϴ¼ø°£¿¡´Â
¹è¿¿¡¼ Çϳª¾¿ »©³»¾î¼ draw()¸¦ È£ÃâÇϸé
°¢°¢ÀÇ type¿¡ ¸Â´Â draw() method°¡ È£ÃâµÉ¼ö Àִ°ÍÀÔ´Ï´Ù.
_polymorphic_array[0].draw();//À̶§´Â c°´Ã¼ÀÇ draw°¡
_polymorphic_array[1].draw();//À̶§´Â r°´Ã¼ÀÇ draw°¡ È£Ãâ
À§ÀÇ ¿¹Á¦°¡ Á¶±Ý ¾ïÁö ½º·¯¿î Á¡ÀÌ ÀÖ´õ¶óµµ ÀÌÇØÇØÁֽñâ
¹Ù¶ø´Ï´Ù.