¼Ò¼³°°ÀºÀÚ¹Ù1ºÎ  5Àå. Class for Polymorphism  Interface  

5.2 Interface

 

 

5.2.1 ÀÎÅÍÆäÀ̽º¶õ?

ÀÎÅÍÆäÀ̽º¶õ ¿µ¾îÀÔ´Ï´Ù. µû·Î ¹ø¿ªÇÒ ¸»ÀÌ ¾ø½À´Ï´Ù. ¸» ±×´ë·Î ÀÎÅÍÆäÀ̽ºÀÔ´Ï´Ù. ÀÌ ¸»À» ÀÌÇØÇϽô ºÐÀº ÀÎÅÍÆäÀ̽ºÀÇ ÇãÅ»ÇÔÀ» ´À³¢½Å ºÐÀ̶ó »ý°¢µË´Ï´Ù. ÀÚ¹Ù°ü·ÃÃ¥¿¡¼­´Â ÀÎÅÍÆäÀ̽º¸¦ ¾î¶»°Ô ¸¸µé¸ç ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö ±¸±¸ÀýÀý ¼³¸íÇϰí ÀÖ½À´Ï´Ù. º¸Åë ´ÙÀ½°ú °°ÀÌ ¼³¸íÇϰí ÀÖ½À´Ï´Ù.

 

    ÀÎÅÍÆäÀ̽ºÀÇ Á¤ÀÇ

n         ÀÎÅÍÆäÀ̽º¶õ Ãß»ó Ŭ·¡½ºÀÇ ÀÏÁ¾ÀÌ´Ù.

n         ÀÎÅÍÆäÀ̽º ³»ÀÇ ¸Þ¼­µå´Â ¸ðµÎ Ãß»ó ¸Þ¼­µå´Ù.

n         ÀÎÅÍÆäÀ̽º ³»ÀÇ ¸â¹ö´Â ¸ðµÎ static finalÀÌ´Ù. 

n         implements¸¦ »ç¿ëÇØ¼­ ¸ðµç Ãß»ó ¸Þ¼­µå¸¦ ±¸ÇöÇØ¾ß ÇÑ´Ù.

n         ´ÜÀÏ »ó¼ÓÀÇ ÇѰ踦 ±Øº¹Çϰí ÀÖ´Ù.

 

¾Æ½Ã´Â ºÐÀº ¾Æ½Ã°ÚÁö¸¸ ÀÌ·¯ÇÑ Á¤Àǰ¡ ¹Ù·Î ÀÎÅÍÆäÀ̽ºÀÔ´Ï´Ù. ÀÎÅÍÆäÀ̽º¸¦ ¼³¸íÇÑ °÷Àº ¼ö ¾øÀÌ ¸¹½À´Ï´Ù. ÇÏÁö¸¸ ÀÎÅÍÆäÀ̽º¿¡ ´ëÇØ¼­ Á¦´ë·Î ÀÌÇØ ½ÃÄÑÁØ Ã¥Àº ¾ø¾ú½À´Ï´Ù. Á¶±Ý¸¸ ´õ Ä£ÀýÇÏ°Ô ¼³¸íÇØ ÁÖ¾ú´õ¶ó¸é ±×·¸°Ô ¿À·£ ½Ã°£À» ÀÌ ÀÎÅÍÆäÀ̽º ¶§¹®¿¡ Çì¸ÅÁö ¾Ê¾ÒÀ» °ÍÀ»!

 

¿©ÇÏÆ° ÀÎÅÍÆäÀ̽º´Â ¾ÆÁÖ °ñÄ¡ ¾ÆÇÁÁö¸¸ ÀÎÅÍÆäÀ̽º ¾øÀÌ´Â °íÂ÷¿øÀûÀÎ ÀÚ¹ÙÀÇ °³³äÀº ¾ø´Ù°í º¸¾Æµµ °ú¾ðÀÌ ¾Æ´Õ´Ï´Ù. ÀÎÅÍÆäÀ̽ºÀÇ º»ÁúÀûÀÎ Àǹ̰¡ º¯ÁúµÇ¾î ÀÎÅÍÆäÀ̽ºÀÇ ´Ù¸¥ ¸é¸¸À» º¸´Â °æ¿ì°¡ ¸¹½À´Ï´Ù. ÀϹÝÀûÀ¸·Î ¿©·¯ºÐÀÌ Á÷Á¢ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé¾î »ç¿ëÇÏ´Â °÷Àº ´ÙÀ½°ú °°½À´Ï´Ù.(Á÷Á¢ ÀÎÅÍÆäÀ̽º¸¦ »õ·Î ¸¸µå´Â °ÍÀÌ ¾Æ´Ï¶ó ¸¸µé¾îÁø ±ÔÄ¢¿¡ ÀÇÇØ¼­¸¸ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÕ´Ï´Ù.)

 

¿©·¯ºÐÀÌ Á÷Á¢ ÀÎÅÍÆäÀ̽º¸¦ Á÷Á¢ »ç¿ëÇÏ´Â °÷

n         À̺¥Æ®ÀÇ Ã³¸®

n         RunnableÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÑ ½º·¹µå »ý¼º

 

¾Æ¸¶µµ ¿©·¯ºÐÀÌ ÀÚ¹Ù¸¦ ¹è¿ì¸é¼­ ÀÎÅÍÆäÀ̽º¸¦ °¡Àå ¸¹ÀÌ Á¢ÇÑ °÷ÀÏ °ÍÀÔ´Ï´Ù. º¸Åë À̰ÍÀ» ¼³¸íÇÒ ¶§ ÀÌ·¸°Ô ÇÏ¸é µÈ´Ù¶ó°í ¹è¿ó´Ï´Ù. ±×¸®°í´Â ÀÎÅÍÆäÀ̽º´Â implementsÇØ¼­ »ç¿ëÇÏ¸é µÈ´Ù¶ó°í ¹è¿ï »Ó ´õ ÀÌ»óÀº ¾ð±ÞÇÏÁö ¾Ê´Â °ÍÀÌ »ç½ÇÀÔ´Ï´Ù. ÇÏÁö¸¸ ÀÚ¹Ù¿¡¼­ ÀÎÅÍÆäÀ̽º´Â ¾öû³ª°Ô ¸¹½À´Ï´Ù. ƯÈ÷ µ¥ÀÌÅͺ£À̽º ÂÊÀ¸·Î ³Ñ¾î°£´Ù¸é ÀÎÅÍÆäÀ̽º°¡ ´õ ¸¹½À´Ï´Ù. ¹°·Ð ±× ¸¸ÇÑ ÀÌÀ¯°¡ ÀÖ½À´Ï´Ù¸¸ ¿ì¸®´Â ±×°ÍÀÌ ÀÎÅÍÆäÀ̽ºÀÎÁÙµµ ¸ð¸£°í »ç¿ëÇϰí ÀÖ½À´Ï´Ù. ¾Æ·¡´Â µ¥ÀÌÅͺ£À̽ºÀÇ ÀÎÅÍÆäÀ̽ºÀÇ Æ®¸® ±¸Á¶¸¦ º¸¿©ÁÖ°í ÀÖ´Â ±¸Á¶µµ ÀÔ´Ï´Ù. ÇѹøÀÌ¶óµµ µ¥ÀÌÅͺ£À̽º¸¦ ÇØ º¸½Å ºÐÀº ¾Æ! ÀÌ·²¼ö°¡¶ó´Â °¨Åº»ç¸¦ Ç¥½ÃÇÒ ¸¸Å­ ¸¹½À´Ï´Ù.

 

µ¥ÀÌÅͺ£À̽º¿¡¼­ »ç¿ëµÇ´Â ÀÎÅÍÆäÀ̽º

interface java.sql.Array

interface java.sql.Blob

interface java.sql.Clob

interface java.sql.Connection

interface java.sql.DatabaseMetaData

interface java.sql.Driver

interface java.sql.Ref

interface java.sql.ResultSet

interface java.sql.ResultSetMetaData

interface java.sql.SQLData

interface java.sql.SQLInput

interface java.sql.SQLOutput

interface java.sql.Statement

interface java.sql.PreparedStatement

interface java.sql.CallableStatement

interface java.sql.Struct

 

ÀÚ¹Ù¿¡¼­ »ç¿ëÀÚ Ãø¸é¿¡¼­ »ç¿ëÇϴ Ŭ·¡½ºÀÇ ¼ö´Â Àüü 1732°³ ±×¸®°í ÀÎÅÍÆäÀ̽ºÀÇ ¼ö´Â 422°³ÀÔ´Ï´Ù. ÀÌ Á¤µµ µÈ´Ù¸é ¹Ýµå½Ã ÀÎÅÍÆäÀ̽º¿¡ ´ëÇØ¼­ ¾Ë¾Æ¾ß ÇÏÁö ¾ÊÀ»±î¿ä? Á÷Á¢ ¼¼¾î º¸´Ï 422°³´õ±º¿ä. ¾î¶»°Ô ¼¼¾î º¸¾Ò´ÂÁö´Â ºñ¹ÐÀÔ´Ï´Ù. ¹°·Ð ½Å·Ú¼ºÀº ÀÖ½À´Ï´Ù.

 

ÀÎÅÍÆäÀ̽º´Â ÀÎÅÍÆäÀ̽ºÀÔ´Ï´Ù. µ¥ÀÌÅͺ£À̽º¿¡ ÀÎÅÍÆäÀ̽º°¡ ¸¹Àº ÀÌÀ¯ ¶ÇÇÑ ÀÎÅÍÆäÀ̽ºÀÇ ±Ùº»ÀûÀÎ °³³ä ¶§¹®ÀÔ´Ï´Ù. ÀÏ´Ü ÀÌ Àý¿¡¼­´Â ÀϹÝÀûÀÎ ÀÎÅÍÆäÀ̽º¸¦ ¼³¸íÇÏ´Â °üÁ¡¿¡¼­ ÀÎÅÍÆäÀ̽º¸¦ ¼³¸íÇÑ ÈÄ ¿ø·¡ÀÇ ÀÎÅÍÆäÀ̽º »ç¿ë¿¡ °üÇØ ¾Ë¾Æ º¸°Ú½À´Ï´Ù. ±×¸®°í ´õ ÀÚ¼¼ÇÑ »çÇ×Àº ¾ÕÀ¸·Î ³ª¿Ã Àý¿¡¼­ »ó¼¼ÇÏ°Ô ¼³¸íÇϵµ·Ï ÇϰڽÀ´Ï´Ù.

 

 

5.2.2 ÀϹÝÀûÀÎ ÀÎÅÍÆäÀ̽ºÀÇ ±¸Á¶

 ÀÎÅÍÆäÀ̽º´Â public abstract¸â¹ö¸Þ¼­µå¿Í static final ¸â¹ö º¯¼ö·Î µÇ¾î ÀÖ½À´Ï´Ù. ¹°·Ð, ¸â¹ö¶ó´Â Ãø¸é¿¡¼­´Â Ŭ·¡½º¿Í °°½À´Ï´Ù. ÇÏÁö¸¸, ¾Õ¿¡ ´Ù¸¥ Ű¿öµå°¡ ºÙ´Â´Ù´Â °ÍÀº ¸¹Àº ¶æÀ» ³»Æ÷Çϰí ÀÖ½À´Ï´Ù. ÀÚ¹Ù¿¡¼­ ¸»ÇÏ´Â interfaceÀÇ ±¸Á¶¸¦ ´ÙÀ½°ú °°ÀÌ Á¤¸® ÇÒ ¼ö ÀÖ½À´Ï´Ù.

 

n        ¸ðµç ¸Þ¼­µå´Â ¹¬½ÃÀûÀ¸·Î public abstractÀÌ´Ù.

n        ¸ðµç µ¥ÀÌÅÍ´Â ¹¬½ÃÀûÀ¸·Î static finalÀÌ´Ù.

n        abstract¸Þ¼­µå¸¦ Æ÷ÇÔÇϰí Àֱ⠶§¹®¿¡ °´Ã¼¸¦ »ý¼ºÇÒ ¼ö ¾ø´Ù.

n        extends¸¦ ÀÌ¿ëÇÏ¿© »ó¼ÓÀ» ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó implements¸¦ ÀÌ¿ëÇÏ¿© ±¸ÇöÇÑ´Ù.

 

¹¬½ÃÀûÀ̶ó´Â ¸»Àº ¾Õ¿¡ public abstract¸¦ ºÙÀÌÁö ¾Ê¾Æµµ ¹«Á¶°Ç public abstractÀ̸ç public abstractÀ̾î¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. public abstract°¡ ºÙ´Â´Ù´Â °ÍÀº ¸ðµç ¸â¹ö¸Þ¼­µå´Â ¹Ýµå½Ã Ãß»ó ¸Þ¼­µå¶ó´Â °ÍÀÔ´Ï´Ù. Áï, ¸Þ¼­µåÀÇ ¸öü°¡ ¾ø´Ù´Â ¸»ÀÔ´Ï´Ù. abstractÀÇ Àǹ̴ ½±½À´Ï´Ù. ÇÏÁö¸¸ ¸â¹öÇʵ尡 static finalÀ̶ó´Â °ÍÀº Á» »ý°¢À» ÇØ º¸¾Æ¾ß ÇÕ´Ï´Ù. ±× ´À³¦Àº interface´Â ¸Þ¼­µå·Î¸¸ ÀÌ·ç¾îÁ® ÀÖ´Ù°í ¸»Çصµ »ó°ü¾ø´Ù´Â ¸»·Î Ç¥ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ºÐ¸í 2°³ÀÇ ±¸¼º¿ä¼Ò°¡ Àִµ¥ Çϳª°¡ ¾ø´Â °ÍÀ̶ó°í ¸»Çصµ µÈ´Ù´Ï ÀÌ»óÇÏÁö ¾Ê½À´Ï±î? Â÷±Ù Â÷±Ù µûÁö°í º»´Ù¸é staticÀ̶õ °´Ã¼¿Í ¸Þ¸ð¸® »ý¼º°ú ÀüÇô »ó°ü ¾ø´Â Àü¿ªÀûÀÎ static¸Þ¸ð¸®°ø°£¿¡ ÀÚ¸®¸¦ Àâ°Ô µË´Ï´Ù. ±×¸®°í finalÀ̶ó´Â °ÍÀº ±× ¸Þ¸ð¸®¿¡ µé¾î ÀÖ´Â µ¥ÀÌÅÍ´Â finalÀ̱⠶§¹®¿¡ Çѹø Á¤ÇØÁö¸é °áÄÚ ¹Ù²Ü ¼ö ¾ø´Ù´Â Àǹ̸¦ ³»Æ÷Çϰí ÀÖ½À´Ï´Ù. ±×·¸±â ¶§¹®¿¡ static finalÀº ÇÁ·Î±×·¥ÀÇ ±¸Á¶¿Í º° »ó°ü ¾ø´Â °Íó·³ »ý°¢µÇ¾î Áú ¼ö ÀÖ½À´Ï´Ù.

´ëÇ¥ÀûÀÎ static finalÀÇ ¿¹¸¦ µé¾î º¸°Ú½À´Ï´Ù. Çѹø »ý°¢ÇØ º¸½Ê½Ã¿À. ¾î¶² ¿¹°¡ ÀÖÀ»±î¿ä? º¸Åë ¿ì¸®µéÀÌ ¸¹ÀÌ »ç¿ëÇÏ´Â static final¸â¹öÇʵå Áß¿¡ ÀÌ·± °ÍÀÌ ÀÖ½À´Ï´Ù.

 

static finalÀÇ ¿¹

MathŬ·¡½ºÀÇ ¸â¹öÇʵå - public static final double PI

ColorŬ·¡½ºÀÇ ¸â¹öÇʵå - public static final Color black

 

»ç¿ëÇÒ ¶§

 Math.PI

 Color.black

 

À§ÀÇ Ç¥¿¡¼­ ³ªÅ¸³ª´Â static final¸â¹öÇʵå´Â ´©±¸³ª ´Ù ¾Ë ¼ö ÀÖ´Â °ªµéÀÌ¸ç ¹Ù²ð ¼ö ¾ø´Â °ªµéÀÔ´Ï´Ù. public staticÀÌ´Ï Å¬·¡½ºÀÇ À̸§À¸·Î Á¢±Ù °¡´ÉÇÒ °ÍÀ̸ç finalÀÌ´Ï±î ¿Ïº®ÇÑ »ó¼öÀÔ´Ï´Ù. Àß »ý°¢ÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù. PI¶ó´Â static finalÀº »ó¼öÀÔ´Ï´Ù. MathŬ·¡½º¿¡ ÀÖ´Â ÀÌÀ¯´Â µüÈ÷ static finalÀº Math¿Í ÀüÇô º°°³ÀÇ °Íó·³ ÀÛµ¿ÇÕ´Ï´Ù. À̰ÍÀº staticÀÇ ¿ø¸® ¶§¹®ÀÔ´Ï´Ù. ±×·¸´Ù¸é PI°¡ ´Ù¸¥ Ŭ·¡½º ³»¿¡ À־ º°¹Ý Â÷À̰¡ ¾ø´Ù´Â ¶æÀÌ ¾Æ´Ò±î¿ä? ±×·¸´Ù¸é ¿Ö MathŬ·¡½º ³»¿¡ ¸¸µé¾úÀ»±î¿ä? ´äÀº ¿ì½À°Ôµµ Math¶ó´Â °ÍÀÌ ¼ö¿¡ °ü·ÃµÈ Ŭ·¡½ºÀ̰í PI¶ó´Â static finalº¯¼ö¸¦ µüÈ÷ ³õ¾Æ µÑ °÷µµ ¾øÀ¸´Ï Math¿¡ ³õ¾Æ µÐ °÷ÀÌÁÒ.

 

¾Õ¿¡¼­ ¾ð±ÞÇÑ ³»¿ë Áß¿¡¼­ interface´Â ¡°public abstractÀÌ´Ù. ±×¸®°í ¸Þ¼­µå·Î¸¸ ÀÌ·ç¾îÁ® ÀÖ´Ù¡±¶ó°í Á¤ÀǸ¦ ³»¸° ÀÌÀ¯¿¡ ´ëÇØ¼­ ¸íÈ®ÇÑ Áõ°Å¸¦ Á¦½ÃÇØ º¸¾Ò½À´Ï´Ù. ±×·¸´Ù¸é interface¸¦ Çѹø ¸¸µé¾î º¸°Ú½À´Ï´Ù. ¾ÆÁ÷, implements¿¡ ´ëÇØ¼­ ¹è¿ìÁö ¾Ê¾ÒÁö¸¸ Á÷Á¢ ´«À¸·Î º¸½Ã¸é implements°¡ ¾î¶»°Ô »ç¿ëµÇ´ÂÁö ¾Ë ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. extends¿Í º° Â÷À̰¡ ¾øÁö¸¸ ÀÎÅÍÆäÀ̽ºÀÇ ¸ðµç ¸Þ¼­µå¸¦ ±¸ÇöÇϰڴٴ °ÍÀÌ implementsÀÇ ÀÇÁöÀÌ´Ï À̰͸¸ ±â¾ïÇÏ½Ã¸é µË´Ï´Ù. ¾Æ·¡ÀÇ ¿¹´Â ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁÖ°í ÀÖ½À´Ï´Ù.

 

BodySign.java(interface¸¦ Å×½ºÆ®Çϱâ À§ÇÑ ¿¹Á¦)

public interface BodySign{

             public static final int STRAIGHT = 1;

             public static final int CURVE = 2;

             public static final int DOWN = 1;

             public static final int UP = 2;

             public static final int LEFT = 3;

             public static final int RIGHT = 4;

             public void countFinger(int how_ball);

             public void directionBall(int how_direct);

}

Catcher.java(interface¸¦ Å×½ºÆ®Çϱâ À§ÇÑ ¿¹Á¦)

public class Catcher implements BodySign{

             public void countFinger(int how_ball){

                           if(how_ball == BodySign.STRAIGHT){

                                        System.out.println("Á÷±¸¸¦ ´øÁý´Ï´Ù");

                           }

                           else if(how_ball == BodySign.CURVE){

                                        System.out.println("º¯È­±¸¸¦ ´øÁý´Ï´Ù");

                           }

                          

             }

             public void directionBall(int how_direct){

                           if(how_direct == BodySign.UP){

                                        System.out.println("»óÇⱸ¸¦ ´øÁý´Ï´Ù.");

                           }

                           else if(how_direct == BodySign.DOWN){

                                        System.out.println("ÇÏÇⱸ¸¦ ´øÁý´Ï´Ù.");

                           }

                           else if(how_direct == BodySign.LEFT){

                                        System.out.println("ÁÂÇⱸ¸¦ ´øÁý´Ï´Ù.");

                           }

                           else if(how_direct == BodySign.RIGHT){

                                        System.out.println("¿ìÇⱸ¸¦ ´øÁý´Ï´Ù.");

                           }

             }

             public static void main(String[] args){

                           Catcher c = new Catcher();

                           c.directionBall(3);//Á¦1±¸. ÁÂÇⱸ¸¦ ´øÁý´Ï´Ù.

                           c.directionBall(BodySign.LEFT);//Á¦2±¸. ´Ù½Ã ÁÂÇⱸ

                           c.countFinger(1);//Á¦3±¸. Á÷±¸¸¦ ´øÁý´Ï´Ù.

                           c.countFinger(BodySign.CURVE);//Á¦4±¸. º¯È­±¸¸¦ ´øÁý´Ï´Ù.

             }

}

C:\examples\5. Class for Polymorphism Java>javac Catcher.java

C:\examples\5. Class for Polymorphism Java>java Catcher

ÁÂÇⱸ¸¦ ´øÁý´Ï´Ù.

ÁÂÇⱸ¸¦ ´øÁý´Ï´Ù.

Á÷±¸¸¦ ´øÁý´Ï´Ù

º¯È­±¸¸¦ ´øÁý´Ï´Ù

 

 À§ÀÇ ¿¹´Â ¾ÆÁÖ ´Ü¼øÇÑ interfaceÀÇ »ç¿ë¹ýÀ» º¸¿©ÁÖ°í ÀÖ½À´Ï´Ù. interface ³»ºÎ¿¡ public static final º¯¼ö¸¦ 6°³ ¸¸µé°í public abstract¸Þ¼­µå 2°³¸¦ ¸¸µé¾î ÁÖ¾ú½À´Ï´Ù. abstractŰ¿öµå¸¦ ºÙÀÌÁö ¾Ê¾Æµµ ÀÚµ¿À¸·Î abstract¸Þ¼­µå°¡ µË´Ï´Ù. ¿Ö ¾È ºÙ¿´À»±î¿ä? ³Í¼¾½º °°Àº ¹®Á¦Àä. ¸ðµç ¸Þ¼­µå°¡ abstractÀÌ¸é ±ÍÂú¾Æ¼­ ºÙÀÌÁö ¾ÊÀº °ÍÀº ¾Æ´Ò±î¿ä!! ¹¹ ¹Ï°Å³ª ¸»°Å³ª ÀÔ´Ï´Ù.

 

finalÀÇ »ç¿ë¹ýÀº ÀÍÈ÷ ¾Ë°í ÀÖÁö¸¸ static finalÀÎ °Í¿¡ ÁÖÀÇÇϽñ⠹ٶø´Ï´Ù. ±×¸®°í interface´Â implements¸¦ ÀÌ¿ëÇØ¼­ ¸ðµç ¸Þ¼­µå¸¦ ±¸ÇöÇÏÁö ¾ÊÀ¸¸é ¿¡·¯°¡ ¹ß»ýÇÑ´Ù´Â °Íµµ ÀØÀ¸½Ã¸é ¾ÈµË´Ï´Ù. ÀÌ·Î½á ¿ì¸®´Â ÀÎÅÍÆäÀ̽º¿¡¼­ Á¦ÀÏ °£´ÜÇÑ ¿¹¸¦ ¸¸µé¾î º¸¾Ò½À´Ï´Ù. ÇÏÁö¸¸ ÀÎÅÍÆäÀ̽º´Â À̰ÍÀÌ ÀüºÎ´Â ¾Æ´Õ´Ï´Ù. ÀÏ´Ü ÀÎÅÍÆäÀ̽ºÀÇ ¸Þ¸ð¸® ±¸Á¶¸¦ »ìÆìº¸°í ±×¸®°í ±Ùº»ÀûÀÎ ÀǹÌÀÇ ÀÎÅÍÆäÀ̽º¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڽÀ´Ï´Ù.

 

 

5.2.3 ÀÎÅÍÆäÀ̽ºÀÇ ¸Þ¸ð¸®¿Í ´ÙÁß»ó¼Ó

 ÀÎÅÍÆäÀ̽º¸¦ º¸Åë ´ÙÁß»ó¼ÓÀ» º¯Ä¢ÀûÀ¸·Î Áö¿øÇÑ´Ù¶ó°í µÇ¾î ÀÖ½À´Ï´Ù. º¸Åë ´ÙÁß»ó¼ÓÀ̶ó°í ±×³É ¹Ð¾î ºÙ¿© ¹ö¸®¸é ÈûµéÁö ¾Ê°Ú½À´Ï±î? ´ÙÁß»ó¼ÓÀ̶õ 2°³ÀÇ Å¬·¡½º¸¦ µ¿½Ã¿¡ »ó¼Ó ¹Þ´Â °ÍÀ» ¸»ÇÕ´Ï´Ù. ÇÏÁö¸¸ ÀÚ¹Ù¿¡¼­ ´ÙÁß»ó¼ÓÀ» Áö¿øÇÏÁö ¾Ê´Â ÀÌÀ¯´Â ¹«¾ùÀϱî¿ä? ±× ÀÌÀ¯¸¦ ±×¸²À¸·Î Çѹø ±×·Á º¸°Ú½À´Ï´Ù.

 ´ÙÁß»ó¼ÓÀ» »ç¿ëÇßÀ» ¶§ ¹®Á¦Á¡À» Á¤È®ÇÏ°Ô º¸¿©ÁÖ°í ÀÖ´Â ±×¸²ÀÔ´Ï´Ù. ¾ÆµéA¿Í ¾Æµé B µÑ ´Ù ¾Æ¹öÁö F·ÎºÎÅÍ »ó¼Ó ¹Þ°í ³­ ÈÄ ´Ù½Ã ¾ÆµéA¿Í ¾ÆµéB¸¦ Áߺ¹»ó¼Ó ÇßÀ» ¶§ ¹ß»ýÇÏ´Â ¹®Á¦Á¡Àº ¾Æ¹öÁöF°¡ µÑ »ý±ä´Ù´Â °ÍÀÌ´Ù. ¾Æ¹öÁöF¸¦ µÑ ´Ù »ó¼Ó ¹Þ±â ¶§¹®¿¡ ¼ÕÀÚÀÔÀå¿¡¼­´Â ¾Æ¹öÁöF°¡ µÑÀ» °¡Áö°í ÀÖ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô µÇ¸é ¼ÕÀÚ°¡ ¾Æ¹öÁöF¸¦ »ç¿ëÇÒ ¶§ ¾ÆµéAÀÇ ¾Æ¹öÁöFÀÎÁö ¾ÆµéB¿¡ ¾Æ¹öÁöFÀÎÁö ¸ðÈ£ÇÔÀÌ ¹ß»ýÇÕ´Ï´Ù. C++¿¡¼­´Â ¿µ¿ªÁöÁ¤ÀÚ¸¦ ÀÌ¿ëÇØ¼­ À̰ÍÀ» ÇØ°á Çϰí ÀÖÁö¸¸ »ó¼Ó°ü°è°¡ ´õ º¹ÀâÇØÁö°í »ó¼ÓÀ» °ÅµìÇÏ°Ô µÇ¸é¼­ ¿ÀÈ÷·Á ´õ Å« ¹®Á¦Á¡À» ¹ß»ý½ÃŰ°Ô µÇÀÚ ÀÚ¹Ù¿¡¼­´Â ¾Æ¿¹ Áߺ¹ »ó¼ÓÀ» ±ÝÁöÇϰí ÀÖ½À´Ï´Ù. ÀÚ¹Ù´Â ±âº»ÀûÀ¸·Î ´ÜÀÏ »ó¼Ó¸¸ °¡´ÉÇÕ´Ï´Ù.

ÇÏÁö¸¸ ¾Æ¹öÁö°¡ ´Ù¸¦ ¶§ »ç¿ëÇÑ´Ù¸é ¾î´À Á¤µµ È¿À²¼ºÀÌ ÀÖ½À´Ï´Ù. ÇѲ¨¹ø¿¡ µÎ °¡Áö ±â´ÉÀ» ¸ðµÎ »ó¼ÓÇÏ´Â °ÍÀº ¾ÆÁÖ ¸·°­ÇÑ ÈûÀÔ´Ï´Ù. ¾Æ¹öÁö°¡ ´Ù¸£´Ù¸é ¸»ÀÌÁÒ. À̰ÍÀ» ¾î´À Á¤µµ Ȱ¿ëÇϰí ÀÖ´Â °ÍÀÌ ¹Ù·Î interfaceÀÔ´Ï´Ù. ÀÏ´Ü ¸ðµç Ŭ·¡½º´Â ObjectŬ·¡½º·ÎºÎÅÍ »ó¼ÓÀ» ¹Þ½À´Ï´Ù. µðÆúÆ®·Î ObjectŬ·¡½º¶ó´Â °ÍÀ¸·ÎºÎÅÍ ¿ì¸®°¡ ¸ð¸£´Â »çÀÌ¿¡ ÀÚµ¿À¸·Î »ó¼Ó¹Þ½À´Ï´Ù. ¿©·¯ºÐÀÌ extends¸¦ ÇÏÁö ¾Ê¾Ò´Ù°í ÇÏ´õ¶óµµ extends Object¶ó´Â °ÍÀÌ ºÙ¾î ÀÖ´Â °Í°ú ¸¶Âù°¡Áö ÀÔ´Ï´Ù. ±×¸®°í interface·ÎºÎÅÍ »ó¼Ó ¹Þ¾Ò´Ù¸é ¾î¶»°Ô º¯ÇÒ±î¿ä?

 

BodySign.java(interface¸¦ Å×½ºÆ®Çϱâ À§ÇÑ ¿¹Á¦)

public interface BodySign{

             public static final int STRAIGHT = 1;

             public static final int CURVE = 2;

             public static final int DOWN = 1;

             public static final int UP = 2;

             public static final int LEFT = 3;

             public static final int RIGHT = 4;

             public void countFinger(int how_ball);

             public void directionBall(int how_direct);

}

Catcher.java(interface¸¦ Å×½ºÆ®Çϱâ À§ÇÑ ¿¹Á¦)

public class Catcher extends Object implements BodySign{

             public void countFinger(int how_ball){

               //¡¦.Áß·«

             }

             public void directionBall(int how_direct){

               //¡¦.Áß·« 

             }

             public static void main(String[] args){

                           Catcher c = new Catcher();

                           c.directionBall(3);//Á¦1±¸. ÁÂÇⱸ¸¦ ´øÁý´Ï´Ù.

                           c.directionBall(BodySign.LEFT);//Á¦2±¸. ´Ù½Ã ÁÂÇⱸ

                           c.countFinger(1);//Á¦3±¸. Á÷±¸¸¦ ´øÁý´Ï´Ù.

                           c.countFinger(BodySign.CURVE);//Á¦4±¸. º¯È­±¸¸¦ ´øÁý´Ï´Ù.

             }

}

C:\examples\5. Class for Polymorphism Java>javac Catcher.java

C:\examples\5. Class for Polymorphism Java>java Catcher

ÁÂÇⱸ¸¦ ´øÁý´Ï´Ù.

ÁÂÇⱸ¸¦ ´øÁý´Ï´Ù.

Á÷±¸¸¦ ´øÁý´Ï´Ù

º¯È­±¸¸¦ ´øÁý´Ï´Ù

 

¾Õ¿¡¼­ ³ª¿Â ¿¹Á¦¿¡ extends Object¸¸À» ºÙÀÌ¸é °°Àº °á°ú°¡ ³ª¿É´Ï´Ù. À̰ÍÀº ¸ðµç Ŭ·¡½º°¡ ObjectŬ·¡½º·ÎºÎÅÍ »ó¼Ó ¹Þ´Â´Ù´Â Áõ°ÅÀÔ´Ï´Ù. ±×¸®°í ¿ì¸®´Â¾Õ¿¡¼­ interface¿Í abstract class, class ¸ðµÎ »çÃ̰£À̶ó´Â ¸»À» Çß½À´Ï´Ù. abstract class´Â ´ç¿¬È÷ class¶ó°í ÇßÀ¸´Ï Ŭ·¡½º±¸¿ä. interface´Â abstractŬ·¡½ºÀÌÁö¸¸ ¸ðµç ¸Þ¼­µå°¡ abstractÀ¸·Î µÇ¾îÀÖ´Â Ãà¾àµÈ ÇüÅÂÀÇ Å¬·¡½ºÀÔ´Ï´Ù. ±×·¸´Ù¸é Cather°°Àº °æ¿ì¿¡ BodySingn ÀÎÅÍÆäÀ̽º¿Í  ObjectŬ·¡½º µÑÀ» »ó¼Ó ¹Þ°í ÀÖ´Ù°í »ý°¢Çصµ µË´Ï´Ù.

À§ÀÇ ±×¸²¿¡¼­¿Í °°ÀÌ Catcher´Â Áߺ¹»ó¼ÓÀÇ È¿°ú¸¦ º¸°í ÀÖ½À´Ï´Ù. ÀÎÅÍÆäÀ̽ºµµ Ŭ·¡½ºÀÇ ÇÑ Á¾·ùÀ̱⠶§¹®¿¡ ObjectŬ·¡½º¿Í ÀÎÅÍÆäÀ̽ºÀÇ Áߺ¹»ó¼Ó °³³äÀÌ Àû¿ëµÇ¾î Áö°í ÀÖÀ¸¸ç interfaceÀÚü´Â ¾Æ¹öÁöÀÇ Áߺ¹»ó¼ÓÀÇ ¸ðÈ£¼ºÀ» ¾î´À Á¤µµ ÇØ°áÇϰí Àֱ⵵ ÇÕ´Ï´Ù. ±×¸®°í extends´Â ´Ü Çϳª ¹Û¿¡ ÇÒ ¼ö ¾øÁö¸¸ interface´Â ¿©·¯ °³¸¦ implementsÇØ¼­ »ç¿ëÇÒ ¼ö Àֱ⠶§¹®¿¡ ´ÙÁß »ó¼ÓÀÇ °³³äÀÌ ÇÊ¿äÇÒ °æ¿ì interface¸¦ ¸¹ÀÌ »ç¿ëÇϰí ÀÖ½À´Ï´Ù. ¿©±â¼­ ¾ÆÁÖ ´Ü¼øÈ÷ ÀÎÅÍÆäÀ̽ºµµ Ŭ·¡½ºÀÇ ÇÑ Á¾·ù¶ó°í ÇßÁö¸¸ ÀÌ Àǹ̴ ÀÎÅÍÆäÀ̽º·Î UpcastingÀ» ÇÒ ¼ö ÀÖ´Ù´Â Àǹ̰¡ µË´Ï´Ù. ¾Õ¿¡¼­ ¹è¿î abstract¿Í interface´Â µÑ ´Ù Ŭ·¡½ºÀÇ °³³äÀ» °¡Áö°í Àֱ⠶§¹®¿¡ UpcastingÀÌ µÈ´Ù´Â °ÍÀº ¾ÆÁÖ ¸¹Àº °³³äÀ» Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù. interface°¡ ÁøÁ¤ÇÑ interface°¡ µÇ´Â °ÍÀº ¹Ù·Î interface°¡ Ŭ·¡½ºÀÇ Á¾·ùÀ̸ç UpcastingÀÌ °¡´ÉÇÏ´Ù´Â °ÍÀÔ´Ï´Ù. ÀÌ ºÎºÐÀº Upcasting ºÎºÐ¿¡¼­ ÀÚ¼¼ÇÏ°Ô »ìÆì º¸µµ·Ï ÇϰڽÀ´Ï´Ù. Áö±Ý±îÁö ¹è¿î °ÍÀº ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ´Â °¡Àå ½¬¿î ¹æ¹ýÀÔ´Ï´Ù. ´ÙÀ½À¸·Î interface ±× º»ÁúÀûÀÎ Àǹ̿¡¼­ÀÇ »ç¿ë¹ýÀ» ¾Ë¾Æ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.

 

 

5.2.4 ±Ùº»ÀûÀÎ ÀÎÅÍÆäÀ̽º

Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ¿© °´Ã¼¸¦ »ý¼ºÇßÀ» ¶§ ¿ÜºÎ¿Í »óÈ£ÀÛ¿ëÀ» ÇÏ´Â °ÍÀº public ¸Þ¼­µåÀÔ´Ï´Ù. ÀÌ »óÈ£ÀÛ¿ëÀ̶ó´Â ´Ü¾î¸¦ ¿µ¾î·Î ¹Ù²Û´Ù¸é ÀÎÅÍÆäÀ̽ºÀÔ´Ï´Ù. ¡°Å¬·¡½º¿¡¼­ ÀÎÅÍÆäÀ̽ºÀÇ ¿ªÇÒÀ» ÇÏ´Â °ÍÀº publicÀ¸·Î Á¤ÀÇµÈ ¸Þ¼­µåµéÀÌ´Ù.¡±¶ó°í ¹Ù²Ù¾î ¸»ÇÒ ¼ö ÀÖ½À´Ï´Ù. Áï Ŭ·¡½º¿¡¼­ public¸Þ¼­µå´Â ÀÎÅÍÆäÀ̽º¶ó´Â ¸»ÀÌ ÅëÇÕ´Ï´Ù. ¿©·¯ºÐÀÌ ´Ù¸¥ »ç¶÷¿¡°Ô ½ÅÈ£¸¦ º¸³Â´Âµ¥ Àß ¸ø ¾Ë¾ÆµéÀ¸¸é ÀÎÅÍÆäÀ̽º°¡ ÅëÇÏÁö ¾Ê´Â´Ù°í À̾߱âÇÏÁö ¾Ê½À´Ï±î! ±×¶§ÀÇ ÀÎÅÍÆäÀ̽º°¡ ÀÌ·¯ÇÑ ÀÎÅÍÆäÀ̽º°¡ ÀÚ¹Ù¿¡¼­ Ãß±¸ÇÏ´Â interfaceÀÔ´Ï´Ù.

 

º¸Åë ÀÚ¹ÙÀÇ ÀÎÅÍÆäÀ̽º¿¡ ´ëÇÏ¿© ¼³¸íÇϰí ÀÖÁö¸¸ ±¸Ã¼ÀûÀ¸·Î ¾î¶»°Ô ÀÌ¿ëÇϰí ÀÖ´ÂÁö´Â ¼³¸íÇϰí ÀÖÁö ¾Ê½À´Ï´Ù. ÀÎÅÍÆäÀ̽ºÀÇ ´ëÇ¥ÀûÀÎ ¿¹´Â µ¥ÀÌÅͺ£À̽º µå¶óÀ̺꿡¼­ º¼ ¼ö ÀÖ½À´Ï´Ù. µ¥ÀÌÅͺ£À̽º´Â ¿©·¯ ȸ»ç¿¡¼­ °³¹ßÇϰí ÀÖÁö¸¸ À̸¦ ÅëÇÕÇϱâ´Â Èûµì´Ï´Ù. °¢ ȸ»çÀÇ Á¦Ç°°ú ³»ºÎµ¿ÀÛÀº ´Ù¸£°Ô µÇ°í ÀÖÁö¸¸ ¿©·¯ºÐÀÌ µ¥ÀÌÅÍ º£À̽º¿¡ Á¢±ÙÇÏ´Â °ÍÀº µå¶óÀ̺길 ÀÖ´Ù¸é ¾î¶°ÇÑ µ¥ÀÌÅͺ£À̽º¿¡µµ ¶È °°Àº ÀÎÅÍÆäÀ̽º·Î Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº sun»ç¿¡¼­´Â ÀÌ·¯ÇÑ ¹æ¹ý·ÐÀ» ÀÎÅÍÆäÀ̽º¶ó´Â °ÍÀ» ÀÌ¿ëÇØ¼­ ÇØ°áÇϰí Àֱ⠶§¹®ÀÔ´Ï´Ù. Micro Sun»ç¿¡¼­´Â µ¥ÀÌÅͺ£À̽ºÀÇ Ç¥ÁØ ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇØ µÎ°í ÀÌ ÀÎÅÍÆäÀ̽º¿¡ µû¶ó¼­ °¢ ȸ»ç¿¡¼­ Àڽſ¡ ¸Â´Â µ¥ÀÌÅͺ£À̽º µå¶óÀ̺긦 °³¹ß Çϵµ·Ï ÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ·¸°Ô µÈ´Ù¸é ¸ðµç DBȸ»çµéÀÌ ÀÚ¹Ù JDBCÀÇ ÀÎÅÍÆäÀ̽º¿¡ ¸ÂÃß¾î µå¶óÀ̺긦 °³¹ßÇÏ°Ô µÇ°í ¿©·¯ºÐÀº ¶È °°Àº ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ°Ô µÇ´Â °ÍÀÔ´Ï´Ù.

 

ÀÌ ÀÎÅÍÆäÀ̽º¸¦ Á÷Á¢ µðÀÚÀÎ ÇÏ¿© ¸¸µé¾î º¸µµ·Ï ÇϰڽÀ´Ï´Ù. ÀÏ´Ü ½ºÅ丮´Â ´ÙÀ½°ú °°½À´Ï´Ù. TV¸¦ ¸¸µå´Â µÎ ȸ»ç°¡ ÀÖ½À´Ï´Ù. ÀÌ È¸»çµéÀÌ TV¸¦ ¸¸µéÁö¸¸ ¹Ýµå½Ã TV¸¦ ÄѰųª ä³ÎÀ» ¹Ù²Ù°Å³ª º¼·ýÀ» Á¶ÀýÇÏ´Â ÀÎÅÍÆäÀ̽º´Â °°¾Æ¾ß ÇÑ´Ù´Â ¹ýÀ» Á¦Á¤ÇϰڽÀ´Ï´Ù. ±×·¸´Ù¸é ¸ÕÀú TVÀÇ ÀÎÅÍÆäÀ̽º¸¦ ¹ýÀ¸·Î Á¦Á¤ÇØ µÎ¾î¾ß°ÚÁÒ. TVÀÇ ÀÎÅÍÆäÀ̽º´Â ´ÙÀ½°ú °°½À´Ï´Ù.

 

TVBoard.java(interface¸¦ Å×½ºÆ®Çϱâ À§ÇÑ ¿¹Á¦)

public interface TVBoard{

             public void channelDown();

             public void channelUp();

             public void volumeDown();

             public void volumeUp();

             public void powerOnOff(boolean power);

}

 

ÀÌ·¯ÇÑ ÀÎÅÍÆäÀ̽º¸¦ ±âº»ÀûÀ¸·Î Á¦°øÇÏÁö ¾ÊÀ¸¸é TV¸¦ ÆÇ¸Å ¸øÇÏ°Ô ÇÏÁÒ. SSg¿Í LGgȸ»ç¿¡¼­ TV¸¦ ¸¸µç´Ù°í °¡Á¤ÇÏÁÒ. ¸ÕÀú SSgȸ»ç¿¡¼­ TV¸¦ ÀÚüÀûÀ¸·Î ¸¸µé °ÍÀÔ´Ï´Ù. ÀÏ´ÜÀº ¹ýÀº ÁöÄÑ¾ß °ÚÁÒ. »ç¿ëÀÚµéÀÇ Æí¸®¼ºÀ» À§Çؼ­ ÀÎÅÍÆäÀ̽º¸¦ ÅëÀϽÃŰ°Ú´Ù´Â ¹ýÀ̴ϱî¿ä. ±×·¡¼­ SSg´Â TVBoard ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù.

 

SSgTV.java(interface¸¦ Å×½ºÆ®Çϱâ À§ÇÑ ¿¹Á¦)

public class SSgTV extends Object implements TVBoard{

             private String name="SSg TV";

             private int volume = 5;

             private int channel = 7;

             private boolean power = false;

             public SSgTV(){

                           System.out.println("SSg TV°¡ ¸¸µé¾î Á³½À´Ï´Ù");

             }

             public void channelDown(){

                           this.channel -=1;

                           System.out.println(this.name + "-ä³ÎDown");

             }

             public void channelUp(){

                           this.channel +=1;

                           System.out.println(this.name + "-ä³ÎUp");

             }

 

             public void volumeDown(){

                           this.volume -=1; 

                           System.out.println(this.name + "-º¼·ýDown");

             }

             public void volumeUp(){

                           this.volume +=1;

                           System.out.println(this.name + "-º¼·ýUp");

             }

             public void powerOnOff(boolean power){

                           this.power = power;

 

                           if(this.power==false){

                                        System.out.println(this.name + "-Àü¿øOff");

                           }else{

                                        System.out.println(this.name + "-Àü¿øOn");

                           }

                          

             }

             public void SleepTimer(int time){

                           System.out.println(time + "¾Ë¶÷¼³Á¤ÈÄ¿¡ ÀÚµ¿À¸·Î Á¾·á µË´Ï´Ù.");

                           //±â´Ù¸®´Â ÀÛ¾÷

                           this.powerOnOff(false);

             }

}

 

LGg¶ó´Â ȸ»ç¿¡¼­µµ ±âº»ÀûÀ¸·Î TVBoardÀÎÅÍÆäÀ̽º´Â ±¸ÇöÇÑ ÈÄ ÀڽŵéÀÇ ±â´ÉÀ» ³ÖÀ» ¼ö ÀÖ½À´Ï´Ù. ¹ý¿¡ ÀÇÇϸé! LGgȸ»çÀÇ Á¦Ç°À» ÇÑ ¹ø º¸µµ·Ï ÇϰڽÀ´Ï´Ù.

 

LGgTV.java(interface¸¦ Å×½ºÆ®Çϱâ À§ÇÑ ¿¹Á¦)

public class LGgTV extends Object implements TVBoard{

             private String name="LGg TV";

             private int volume = 5;

             private int channel = 3;

             private boolean power = false;

             public LGgTV(){

                           System.out.println("LGg TV°¡ ¸¸µé¾î Á³½À´Ï´Ù");

             }

             public void channelDown(){

                           this.channel -=1;

                           System.out.println(this.name + "-ä³ÎDown");

             }

             public void channelUp(){

                           this.channel +=1;

                           System.out.println(this.name + "-ä³ÎUp");

             }

 

             public void volumeDown(){

                           this.volume -=1; 

                           System.out.println(this.name + "-º¼·ýDown");

             }

             public void volumeUp(){

                           this.volume +=1;

                           System.out.println(this.name + "-º¼·ýUp");

             }

             public void powerOnOff(boolean power){

                           this.power = power;        

                           if(this.power==false){

                                        System.out.println(this.name + "-Àü¿øOff");

                           }else{

                                        System.out.println(this.name + "-Àü¿øOn");

                           }

             }

             public void AlarmTimer(int time){

                           System.out.println(time + "¾Ë¶÷¼³Á¤ÈÄ¿¡ ÀÚµ¿À¸·Î ÄÑÁý´Ï´Ù.");

                           //±â´Ù¸®´Â ÀÛ¾÷

                           this.powerOnOff(true);

             }

}

 

µÎ ȸ»ç Á¦Ç°À» ºñ±³ÇØ º¸½Ê½Ã¿À. ¸ðµÎ´Ù TV Board¸¦ ±¸ÇöÇϰí ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ °¢ ȸ»çÀÇ ÀÚüÀûÀÎ ±â´Éµµ °¡Áö°í ÀÖ½À´Ï´Ù. ÀÚ ÀÏ´Ü TV¸¦ ¸¸µé°í Å×½ºÆ®¸¦ ÇØ º¸¾Æ¾ß °ÚÁÒ. Àß ÀÛµ¿ÇÏ´ÂÁö È®ÀÎ ÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.

TVTestMain.java(interface¸¦ Å×½ºÆ®Çϱâ À§ÇÑ ¿¹Á¦)

public class TVTestMain{

             public static void main(String[] args){

                           TVBoard s = new SSgTV();

                           s.powerOnOff(true);//TV¸¦ ÄÕ´Ï´Ù.

                           s.channelUp();//ä³ÎÀ» ¿Ã¸³´Ï´Ù.

                           s.volumeUp();

                           s.volumeUp();

                           s.volumeUp();

                           s.volumeUp();//º¼·ýÀ» ¿Ã¸³´Ï´Ù.

                           s.powerOnOff(false);

                           System.out.println();

                           TVBoard g = new LGgTV();

                           g.powerOnOff(true);//TV¸¦ ÄÕ´Ï´Ù.

                           g.channelUp();//ä³ÎÀ» ¿Ã¸³´Ï´Ù.

                           g.channelUp();

                           g.channelUp();

                           g.channelUp();

                           g.volumeDown();

                           g.volumeDown();

                           g.volumeDown();

                          g.powerOnOff(false);

             }

}

C:\examples\5. Class for Polymorphism Java>javac TVBoard.java

C:\examples\5. Class for Polymorphism Java>javac SSgTV.java

C:\examples\5. Class for Polymorphism Java>javac LGgTV.java

C:\examples\5. Class for Polymorphism Java>javac TVTestMain.java

C:\examples\5. Class for Polymorphism Java>java TVTestMain

SSg TV°¡ ¸¸µé¾î Á³½À´Ï´Ù

SSg TV-Àü¿øOn

SSg TV-ä³ÎUp

SSg TV-º¼·ýUp

SSg TV-º¼·ýUp

SSg TV-º¼·ýUp

SSg TV-º¼·ýUp

SSg TV-Àü¿øOff

 

LGg TV°¡ ¸¸µé¾î Á³½À´Ï´Ù

LGg TV-Àü¿øOn

LGg TV-ä³ÎUp

LGg TV-ä³ÎUp

LGg TV-ä³ÎUp

LGg TV-ä³ÎUp

LGg TV-º¼·ýDown

LGg TV-º¼·ýDown

LGg TV-º¼·ýDown

LGg TV-Àü¿øOff

 

TVµéÀÌ ¾ÆÁÖ ÀÛ ÀÛµ¿ÇÏ´Â ±º¿ä. ÇÏÁö¸¸ »ç¿ëÀÚ´Â ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ¼­ Á¶ÀÛÇϰí ÀÖ½À´Ï´Ù. ¹°·Ð TV¸¦ ¸¸µé¾îÁö¸¸ TV³»ºÎ´Â °¢ ȸ»ç¿¡¼­ ¾Ë¾Æ¼­ ÇϰÚÁÒ. ÇÏÁö¸¸ TVÀÇ ÀÎÅÍÆäÀ̽º°¡ °°±â ¶§¹®¿¡ ¾î´À ȸ»çÀÇ Á¦Ç°À̳ª Á¶ÀÛÇϱâ´Â ÆíÇÒ °ÍÀÔ´Ï´Ù. µ¥ÀÌÅͺ£À̽ºÀÇ µå¶óÀ̺굵 ÀÌ·¯ÇÑ ¹æ½ÄÀ¸·Î Sun»ç¿¡¼­ DatabaseÀÇ interface¸¦ Á¤ÀÇÇØµÎ°í ±× interface¿¡ ÀÇÇØ¼­ ¸¸µéµµ·Ï ÇÏ´Â °ÍÀÔ´Ï´Ù.

 

                           TVBoard s = new SSgTV();

                           TVBoard g = new LGgTV();

 

ÀÌ µÎ ÁÙÀ» À¯½ÉÈ÷ ºÁ Áֽñ⠹ٶø´Ï´Ù. ÀϹÝÀûÀÎ UpcastingÀÇ °³³äÀÌ ±×´ë·Î interface¿¡¼­µµ Àû¿ëµÇ°í ÀÖ½À´Ï´Ù. À̰ÍÀº ÀÎÅÍÆäÀ̽º ÀÚüµµ Ŭ·¡½ºÀ̱⠶§¹®¿¡ UpcastingÀ» Àû¿ëÇÒ ¼ö ÀÖ´Â °ÍÀÔ´Ï´Ù. »ç¿ëÀÚ Ãø¸é¿¡¼­ ÀÎÅÍÆäÀ̽º°¡ °íÁ¤µÇ¾î ÀÖÀ¸¸é ¸¹Àº ½Ã°£°ú ºñ¿ëÀ» Àý¾àÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. ¸ðµç TV°¡ °°Àº ÀÎÅÍÆäÀ̽º·Î µÇ¾î ÀÖ´Ù¸é ÇϳªÀÇ Á¶ÀÛ¹ý¸¸ ¾È´Ù¸é ¸ðµç TV¸¦ Á¶ÀÛ ÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. À̰ÍÀÌ ¹Ù·Î ÀÎÅÍÆäÀ̽ºÀÇ º»ÁúÀûÀÎ ¿ªÇÒÀÔ´Ï´Ù. ¸» ±×´ë·Î ÀÎÅÍÆäÀ̽º´Â ÀÎÅÍÆäÀ̽ºÀÔ´Ï´Ù.

 

5.2.5 °á·Ð

Áö±Ý±îÁö ¿ì¸®´Â ÀÎÅÍÆäÀ̽ºÀÇ ÀϹÝÀûÀÎ ÀÇ¹Ì¿Í ±Ùº»ÀûÀÎ Àǹ̸¦ »ìÆìº¸¾Ò½À´Ï´Ù. ¾Ë°í º¸¸é ÀÎÅÍÆäÀ̽ºÀÇ ÀϹÝÀûÀÇ ÀÇ¹Ì¿Í ±Ùº»ÀûÀÎ Àǹ̰¡ ºñ½ÁÇÏÁö¸¸ ¾à°£ ´À³¦»óÀÇ Â÷ÀÌ´Â »ó´çÈ÷ Å®´Ï´Ù. ¿©·¯ºÐÀÌ ÀÎÅÍÆäÀ̽º¸¦ ´Ù·ê ¶§ µÎ °³³äÀ» Á¢¸ñ ½ÃÄѼ­ ÀÎÅÍÆäÀ̽º¸¦ °øºÎÇϽŴٸé ÈξÀ ºü¸£°Ô °í±Þ ÀÚ¹Ù·Î Á¢±Ù ÇÏ½Ç ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.

 

¿©±â¼­ ÀÎÅÍÆäÀ̽º¸¦ ³¡³»±â¿¡´Â ÀÎÅÍÆäÀ̽º¶ó´Â ³ðÀº ³Ê¹«³ªµµ µ¢Ä¡°¡ Å« ³ðÀÔ´Ï´Ù. ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÑ Upcasting¿¡ °üÇÑ °£·«ÇÑ ¼³¸í¸¸ ³ª¿ÔÀ» »Ó ¹Ý ¹Û¿¡ ¿ÀÁö ¸øÇÑ °Í °°±º¿ä. ÀÎÅÍÆäÀ̽º´Â Upcasting, Reflection, RMI, Threadµî¿¡¼­ »ó´çÈ÷ ¸¹Àº ºÎºÐ¿¡¼­ ¸¹Àº Ȱ¾àÀ» Çϰí ÀÖ½À´Ï´Ù. ÇöÀçÀÇ Àý¿¡¼­´Â ÀÎÅÍÆäÀ̽ºÀÇ Àǹ̻óÀÇ Â÷À̸¸ ³íÇßÀ» »Ó ÀÎÅÍÆäÀ̽ºÀÇ Á¦´ë·Î µÈ Ȱ¿ëÀº ¼Ò°³µµ ÇÏÁö ¾Ê¾Ò½À´Ï´Ù. abstract¿Í interfaceÀÇ °£´ÜÇÑ ºñ±³ ÈÄ, Upcasting¿¡¼­ ¼Ò°³µÇ´Â ÀÎÅÍÆäÀ̽ºÀÇ È°¿ë¹ý¿¡ ´ëÇØ¼­ Á»´õ ÀÚ¼¼ÇÏ°Ô ¾Ë¾Æ º¸µµ·Ï ÇϰڽÀ´Ï´Ù. ¹°·Ð °è¼ÓµÇ´Â Àåµé¿¡¼­ ¸¹Àº ºÎºÐ interface¿¡ °ü·Ã µÈ ºÎºÐµéÀÌ ³ª¿Ã °ÍÀÔ´Ï´Ù. ±× ¶§ ±×¶§¸¶´Ù interfaceÀÇ ´À³¦À» ãÀ¸½Ã±â ¹Ù¶ø´Ï´Ù.



jabookÀúÀÚ¸íÇÔ
Á¦¸ñ:¼Ò¼³°°ÀºÀÚ¹Ù1ºÎ
ÀúÀÚ:ÃÖ¿µ°ü