3-2.»ó¼Ó

»ó¼Ó

Ŭ·¡½º´Â °´Ã¼¸¦ Âï¾î³»´Â ÇüƲÀÌ´Ù. Çѹø¸¸ Àß Á¤ÀÇÇØµÎ¸é ¾ó¸¶µçÁö ¸¹Àº °´Ã¼µéÀ» ¼Õ½±°Ô Âï¾î³¾ ¼ö ÀÖÀ¸¸ç ±×·¡¼­ »ý»ê¼ºÀÌ ³ô´Ù°í ÇÑ´Ù. °´Ã¼ ÁöÇâÀÇ »ý»ê¼ºÀ» ´õ¿í ³ôÀ̴ Ư¡ÀÌ Å¬·¡½º·ÎºÎÅÍ Á» ´õ È®ÀåµÈ Ŭ·¡½º¸¦ ¸¸µé ¼ö ÀÖ´Â »ó¼ÓÀÌ´Ù. »ó¼Ó¿¡ ÀÇÇØ ºñ½Á ºñ½ÁÇÑ Äڵ尡 ÅëÇյǸç ÄÚµåÀÇ °ü¸®°¡ ½¬¿öÁø´Ù. ¶ÇÇÑ °´Ã¼ ÁöÇâÀÇ °¡Àå Å« À§·ÂÀÎ ´ÙÇü¼ºµµ »ó¼ÓÀ» ±â¹ÝÀ¸·Î ÇÑ´Ù.

»ó¼ÓÀº ÀÌ¹Ì ¸¸µé¾î ³õÀº Ŭ·¡½ºÀÇ ¸ðµç ¸â¹ö¸¦ ¹°·Á ¹Þ¾Æ »õ·Î¿î Ŭ·¡½º¸¦ Á¤ÀÇÇÏ´Â ±â¹ýÀÌ´Ù. »ó¼ÓÀ» ÇØ Áִ Ŭ·¡½º¸¦ ½´ÆÛ Å¬·¡½º¶ó°í ÇÏ¸ç »ó¼ÓÀ» ¹Þ¾Æ »õ·Î ¸¸µé¾îÁö´Â Ŭ·¡½º¸¦ ¼­ºê Ŭ·¡½º¶ó°í ÇÑ´Ù. C++¿¡¼­´Â ½´ÆÛ Å¬·¡½º¸¦ ºÎ¸ð¶ó°í ÇÏ¸ç ¼­ºê Ŭ·¡½º¸¦ ÀÚ½ÄÀ̶ó°í Çϴµ¥ °°Àº ¿ë¾îÀÌ´Ù. ÀÚ¹Ù¿¡¼­µµ ´Ü¾î°¡ ´õ ª±â ¶§¹®¿¡ ºÎ¸ð, ÀÚ½ÄÀ̶ó´Â ¿ë¾î¸¦ ÈçÇÏ°Ô »ç¿ëÇÑ´Ù. ÀÚ¹ÙÀÇ »ó¼Ó ±¸¹®Àº ´ÙÀ½°ú °°´Ù.

 

class ¼­ºê extends ½´ÆÛ {

          Ãß°¡ ¸â¹ö

}

 

Å°¿öµå extends ´ÙÀ½¿¡ ½´ÆÛ Å¬·¡½º¸¦ Àû´Â´Ù. Àǹ̻óÀ¸·Î ½´ÆÛ Å¬·¡½º¸¦ È®ÀåÇÏ¿© ¼­ºê Ŭ·¡½º¸¦ Á¤ÀÇÇÑ´Ù´Â ¶æÀÌ´Ù. ¼­ºê Ŭ·¡½º´Â ½´ÆÛ Å¬·¡½ºÀÇ ¸ðµç ¸â¹ö¸¦ ¹°·Á ¹Þ´Â´Ù. ´Ü, »ý¼ºÀÚ¸¸Àº ¿¹¿ÜÀûÀ¸·Î »ó¼ÓµÇÁö ¾Ê´Â´Ù. ÀÏ´Ü »ó¼Ó¹ÞÀº ÈÄ Ãß°¡·Î ´õ ÇÊ¿äÇÑ ¸â¹ö¸¦ ¼±¾ðÇϰųª »ó¼Ó¹ÞÀº ¸â¹öÀÇ µ¿ÀÛÀ» ¼öÁ¤ÇÒ ¼öµµ ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.

 

class Car {

     public String Name;

     protected String Color;

     boolean Gasoline;

    

     Car(String aName, String aColor, boolean aGasoline) {

          Name = aName;

          Color = aColor;

          Gasoline = aGasoline;

     }

 

     void Run() {

          if (Gasoline) {

              System.out.println("ºÎ¸ª ºÎ¸ª");

          } else {

              System.out.println("´úÄÈ ´úÄÈ");

          }

     }

     void Stop() {

          System.out.println("³¢ÀÌÀÍ");

     }

}

 

class Truck extends Car {

     int Ton;

     Truck(String aName, String aColor, boolean aGasoline, int aTon) {

          super(aName,aColor,aGasoline);

          Ton = aTon;

     }

     void Run() {

          System.out.println("¿ì´çÅÁ ÄôÅÁ");

     }

     void Convey() {

          System.out.println("ÁüÀ» ½Ç¾î ³ª¸¥´Ù.");

     }

}

 

class JavaExam {

     public static void main(String args[]) {

          Truck Porter = new Truck("Æ÷ÅÍ", "Èò»ö", false, 1000);

          Porter.Run();

          Porter.Convey();

     }

}

 

¾Õ¿¡¼­ Á¤ÀÇÇÑ Car Ŭ·¡½º·ÎºÎÅÍ Á» ´õ ¸¹Àº Ư¼ºÀ» °¡Áö´Â Truck Ŭ·¡½º¸¦ ÆÄ»ý½ÃÄ×´Ù. Æ®·°Àº ÀÚµ¿Â÷ÀÇ ÀÏÁ¾À̹ǷΠÀÚµ¿Â÷ÀÇ ¸ðµç Ư¼ºÀ» ¹°·Á¹Þ´Â´Ù. À̸§, »ö»óÀ» °¡Áö¸ç ´Þ¸± ¼öµµ ÀÖ°í ¸ØÃâ ¼öµµ ÀÖ´Ù. ¿©±â¿¡ ÀûÀç °¡´ÉÇÑ ÅæÀ» ÀǹÌÇÏ´Â Ton Çʵ带 Ãß°¡·Î °¡Áö¸ç ÁüÀ» ½Ç¾î ³ª¸£´Â Convey µ¿ÀÛÀÌ °¡´ÉÇÏ´Ù.

»ý¼ºÀÚ´Â »ó¼ÓµÇÁö ¾ÊÀ¸¹Ç·Î ¼­ºê Ŭ·¡½º°¡ Á÷Á¢ Á¤ÀÇÇØ¾ß ÇÑ´Ù. À̶§ ºÎ¸ð·ÎºÎÅÍ ¹°·Á¹ÞÀº ¸â¹ö´Â Á÷Á¢ ÃʱâÈ­ÇÒ ¼ö ¾øÀ¸¹Ç·Î ºÎ¸ðÀÇ »ý¼ºÀÚ¸¦ È£ÃâÇÏ¿© ÃʱâÈ­¸¦ À§ÀÓÇÑ´Ù. ½´ÆÛÀÇ »ý¼ºÀÚ¸¦ È£ÃâÇÒ ¶§´Â super Å°¿öµå¸¦ »ç¿ëÇÏ¸ç °ýÈ£¾È¿¡ ÃʱâÈ­ÇÒ Àμö¸¦ Àü´ÞÇÑ´Ù. TruckÀº ³× °³ÀÇ Àμö¸¦ ¹Þ¾Æ ÀÌ Áß ¹°·Á¹ÞÀº ¼¼ °³¸¦ Car Ŭ·¡½ºÀÇ »ý¼ºÀÚ·Î ³Ñ±â°í ³ª¸ÓÁö Çϳª¸¦ ÀÚ½ÅÀÌ Á÷Á¢ ÃʱâÈ­ÇÑ´Ù.

¼­ºê Ŭ·¡½º°¡ Á¦´ë·Î µ¿ÀÛÇϱâ À§Çؼ­´Â ºÎ¸ð·ÎºÎÅÍ ¹°·Á¹ÞÀº ¸â¹ö°¡ Á¦´ë·Î ÃʱâÈ­µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. ±×·¡¼­ ¼­ºêÀÇ »ý¼ºÀÚ¿¡¼­ ½´ÆÛÀÇ »ý¼ºÀÚ¸¦ È£ÃâÇÏ´Â super È£Ãâ¹®Àº »ý¼ºÀÚÀÇ ¹Ýµå½Ã óÀ½¿¡ ¿Í¾ß ÇÑ´Ù. ´ÙÀ½Ã³·³ ¼ø¼­¸¦ ¹Ù²Ù¸é ÄÄÆÄÀÏ ¿¡·¯·Î 󸮵ȴÙ.

 

Truck(String aName, String aColor, boolean aGasoline, int aTon) {

     Ton = aTon;

     super(aName,aColor,aGasoline);

}

 

Àü´Þ¹ÞÀº Àμö¸¦ superÀÇ »ý¼ºÀÚ¿¡°Ô ²À ±×´ë·Î Àü´ÞÇÒ ÇÊ¿ä´Â ¾ø´Ù. ÀϺδ ¼öÁ¤Çؼ­ Àü´Þ °¡´ÉÇÏ¸ç ¾Æ¿¹ Àμö·Î ¹ÞÁö ¾Ê¾Æµµ »ó°ü¾ø´Ù. ´ÙÀ½ »ý¼ºÀÚµµ °¡´ÉÇÏ´Ù. Æ®·°Àº Åë»ó °æÀ¯¸¦ ¿¬·á·Î »ç¿ëÇϹǷΠ¿¬·á Á¾·ù¸¦ ¹«Á¶°Ç false·Î ÃʱâÈ­Çß´Ù. ¿¬·á Á¾·ù´Â »ý¼ºÀÚÀÇ Àμö·Î Àü´Þ¹ÞÁöµµ ¾ÊÀ¸¸ç °´Ã¼ »ý¼º¹®¿¡¼­µµ ´ç¿¬È÷ ¿¬·á Á¾·ù¸¦ ÁöÁ¤ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.

 

Truck(String aName, String aColor, int aTon) {

     super(aName,aColor,false);

     Ton = aTon;

}

 

¼­ºê Ŭ·¡½ºÀÇ »ý¼ºÀÚ¿¡¼­ superÀÇ »ý¼ºÀÚ¸¦ È£ÃâÇÏÁö ¾ÊÀ¸¸é µðÆúÆ® »ý¼ºÀÚ°¡ ÀÚµ¿À¸·Î È£ÃâµÈ´Ù. ¸¸¾à ½´ÆÛ Å¬·¡½º¿¡ µðÆúÆ® »ý¼ºÀÚ°¡ ¾ø´Ù¸é »ó¼Ó¹ÞÀº ¸â¹öµéÀÌ Á¦´ë·Î ÃʱâÈ­µÇÁö ¾ÊÀ» °ÍÀ̹ǷΠ¿¡·¯ 󸮵ȴÙ. ¾²·¹±â°ªÀ» °¡Áú ¼ö´Â ¾øÀ¸¹Ç·Î ¾î¶² ½ÄÀ¸·Îµç ¸â¹öµéÀº ÃʱâÈ­µÇ¾î¾ß ÇÑ´Ù.

¼­ºê´Â ½´ÆÛÀÇ ¸Þ¼­µå¸¦ ±×´ë·Î »ó¼Ó¹ÞÀ¸¹Ç·Î ½´ÆÛÀÇ µ¿ÀÛ ¹æ½ÄÀ» ÀÏ´ÜÀº µû¸¥´Ù. ±×·¯³ª ½´ÆÛÀÇ ¸Þ¼­µå¿Í ´Ù¸£°Ô µ¿ÀÛÇÏ°í ½Í´Ù¸é ¸Þ¼­µå¸¦ ÀçÁ¤ÀÇ(Override)ÇÑ´Ù. ÀçÁ¤ÀǶõ ½´ÆÛÀÇ ¸Þ¼­µå¿Í µ¿ÀÏÇÑ À̸§ÀÇ ¸Þ¼­µå¸¦ ¼­ºê¿¡ ¶Ç Á¤ÀÇÇÏ´Â °ÍÀÌ´Ù.

À§ ¿¹¿¡¼­ Car´Â Run°ú Stop ¸Þ¼­µå¸¦ Truck¿¡°Ô ¹°·ÁÁØ´Ù. ¾î¶² ÀÚµ¿Â÷³ª ¸ØÃß´Â µ¿ÀÛÀº °ÅÀÇ ºñ½ÁÇϹǷΠStop ¸Þ¼­µå´Â »ó¼Ó¹ÞÀº °ÍÀ» ±×´ë·Î »ç¿ëÇ쵂 ´Þ¸®´Â ¹æ½ÄÀº Á¶±Ý ´Ù¸¦ ¼ö ÀÖÀ¸¹Ç·Î Run ¸Þ¼­µå´Â ÀçÁ¤ÀÇÇß´Ù. ºÎ¸ðÀÇ Run ¸Þ¼­µå¿Í ¶È°°Àº À̸§À¸·Î ÀÚ½ÄÀÌ ¸Þ¼­µå¸¦ ¶Ç Á¤ÀÇÇÏ¸é µÈ´Ù. Æ®·°Àº ¾Æ¹«·¡µµ ÀϹÝÀûÀÎ ÀÚµ¿Â÷º¸´Ù´Â Á» ´õ ½Ã²ô·´±â ¸¶·ÃÀÌ´Ù.

¸Þ¼­µå°¡ ÀçÁ¤ÀÇµÇ¸é ½´ÆÛ Å¬·¡½ºÀÇ ¸Þ¼­µå°¡ ¾Æ´Ñ ÀçÁ¤ÀÇµÈ ¸Þ¼­µå°¡ ´ë½Å È£ÃâµÈ´Ù. ÀçÁ¤ÀÇµÈ ¸Þ¼­µå³»¿¡¼­ ¿ø·¡ÀÇ ¸Þ¼­µå¸¦ È£ÃâÇÏ·Á¸é super Å°¿öµå·Î ¿ø·¡ ¸Þ¼­µå¸¦ È£ÃâÇÏ¸é µÈ´Ù. ÀçÁ¤ÀÇ¿¡ ÀÇÇØ µ¿ÀÛÀÌ ¿ÏÀüÈ÷ ¹Ù²î´Â °ÍÀÌ ¾Æ´Ï¶ó ¿ø·¡ µ¿ÀÛ¿¡ ´Ù¸¥ µ¿ÀÛÀ» Ãß°¡ÇÏ°í ½ÍÀ» ¶§ ÀÌ ±â¹ýÀ» »ç¿ëÇÑ´Ù. ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇØ º¸ÀÚ.

 

void Run() {

     super.Run();

     System.out.println("¿ì´çÅÁ ÄôÅÁ");

}

 

superÀÇ Run ¸Þ¼­µå°¡ ¸ÕÀú È£ÃâµÇ¹Ç·Î ¿¬·á Á¾·ù¿¡ µû¶ó ´Þ¸®´Â ¼Ò¸®¸¦ ¸ÕÀú ³½ ÈÄ Æ®·°ÀÇ °íÀ¯ÇÑ ¼Ò¸®¸¦ ¶Ç ³½´Ù. ¿ø·¡ ¸Þ¼­µåÀÇ µ¿ÀÛ¿¡´Ù Ãß°¡ µ¿ÀÛÀ» ´õÇÏ´Â °ÍÀÌ´Ù. À̶§´Â »ý¼ºÀÚ¿Í ´Þ¸® superÀÇ ¸Þ¼­µå È£ÃâÀÌ ¹Ýµå½Ã óÀ½¿¡ ¿Ã ÇÊ¿ä´Â ¾ø´Ù. ¼­ºê Ŭ·¡½º°¡ ÇÏ°í ½ÍÀº µ¿ÀÛÀ» ¸ÕÀú ÇÑ ÈÄ ½´ÆÛ Å¬·¡½ºÀÇ ¸Þ¼­µå¸¦ È£ÃâÇÒ ¼öµµ ÀÖ´Ù. µÚ¿¡ È£ÃâÇÒ ¼öµµ ÀÖ°í Áß°£¿¡ È£ÃâÇÒ ¼öµµ ÀÖÀ¸¸ç ½ÉÁö¾î ¿©·¯¹ø È£ÃâÇÒ ¼öµµ ÀÖ´Ù.

 

void Run() {

     System.out.println("¿ì´çÅÁ ÄôÅÁ");

     super.Run();

}

 

½´ÆÛÀÇ ¸Þ¼­µå´Â ÀçÁ¤ÀÇµÈ ¸Þ¼­µå¿¡ ÀÇÇØ Àá½Ã °¡·ÁÁ® ÀÖ´Ù »ÓÀÌÁö ÀϹÝÀûÀÎ ¸Þ¼­µå¿Í ´Ù¸¦ ¹Ù ¾øÀ¸¹Ç·Î ÇÊ¿äÇÒ ¶§ ¾ðÁ¦µçÁö È£ÃâÇÏ¸é µÈ´Ù. º° ½Ç¿ë¼ºÀº ¾øÁö¸¸ Convey¿¡¼­ super.Run()À» È£ÃâÇÏ´Â °Íµµ ¹°·Ð °¡´ÉÇÏ´Ù. ¸Þ¼­µå È£Ãâ ¹®¹ý¿¡¸¸ ¸ÂÀ¸¸é µÈ´Ù.

¸Þ¼­µå¸¦ ÀçÁ¤ÀÇÇϵíÀÌ Çʵ嵵 ÀçÁ¤ÀÇÇÒ ¼ö ÀÖ´Ù. ½´Æ۷κÎÅÍ ¹°·Á¹ÞÀº ÇʵåÀÇ Å¸ÀÔÀÌ ¸¶À½¿¡ ¾Èµç´Ù¸é ´Ù¸¥ ŸÀÔÀ¸·Î ´Ù½Ã ¼±¾ðÇÏ¸é µÈ´Ù. ÇʵåÀÇ ÀçÁ¤ÀÇ ±â¹ýÀº ½Ç¿ë¼ºÀÌ ³ôÁö ¾ÊÁö¸¸ ¾ïÁö·Î ¿¹¸¦ µé ¼ö´Â ÀÖ´Ù. ¿¹¸¦ µé¾î Car Ŭ·¡½ºÀÇ Color´Â ¹®ÀÚ¿­Àε¥ Truck¿¡¼­´Â RGBÀÇ Á¶ÇÕÀ¸·Î »ö»óÀ» Ç¥ÇöÇÒ ¼ö ÀÖµµ·Ï Á¤¼ö·Î ÀçÁ¤ÀÇÇÒ ¼ö ÀÖ´Ù.

 

class Truck extends Car {

     int Ton;

     int Color;

 

ÀÌ·¸°Ô ¼±¾ðÇϸé CarÀÇ Color Çʵå´Â °¡·ÁÁö¸ç Truck Ŭ·¡½º¿¡¼­ Color ¸íĪÀº Á¤¼öÇüÀ¸·Î »ç¿ëµÈ´Ù. ¹°·Ð Truck ³»¿¡¼­´Â Color¸¦ Á¤¼öÇüÀ¸·Î ÂüÁ¶ÇØ¾ß ÇÑ´Ù. ¸¸¾à ½´ÆÛÀÇ °¡·ÁÁø Çʵ带 ¾×¼¼½ºÇØ¾ß ÇÑ´Ù¸é super.Color·Î ¾×¼¼½ºÇÒ ¼ö ÀÖ´Ù.

´ÙÇü¼º

»ó¼ÓÀ» ÅëÇØ °´Ã¼ ÁöÇâÀÇ °¡Àå Å« Ư¡À̶ó ÇÒ ¼ö ÀÖ´Â ´ÙÇü¼ºÀÌ ¼º¸³ÇÑ´Ù. ´ÙÇü¼ºÀº ¶È°°Àº È£Ãâ¹®ÀÌ ½ÇÁ¦·Î´Â ´Ù¾çÇÑ ÇüÅ·Πµ¿ÀÛÇÏ´Â °ÍÀÌ´Ù. °´Ã¼ ÁöÇâ ÀÔ¹®Àڵ鿡°Ô °¡Àå ¾î·Á¿î °³³äÀε¥ Â÷±Ù Â÷±Ù ¿¬±¸ÇØ º¸ÀÚ. ¸¸¾à ¾ÆÁ÷ ´ÙÇü¼ºÀ» Àß ÀÌÇØÇÏÁö ¸øÇÏ°í ÀÖ´Ù¸é C++ ¹®¹ý¼­¸¦ ÅëÇØ ´ÙÇü¼ºÀÇ °³³äÀ» ¸ÕÀú ÀÍÈ÷±â¸¦ ±ÇÀåÇÑ´Ù. ÀÚ¹ÙÀÇ ¸Þ¼­µå´Â ¹«Á¶°Ç ´ÙÇüÀûÀ¸·Î µ¿ÀÛÇϱ⠶§¹®¿¡ Æí¸®Çϱâ´Â ÇÏÁö¸¸ ´ÙÇü¼ºÀÇ Çʿ伺À» ½Ç°¨Çϱ⿡´Â C++º¸´Ù ÁÁÁö ¸øÇÏ´Ù.

´ÙÇü¼ºÀÌ ¼º¸³ÇÏ´Â ±âÃÊ´Â ½´ÆÛ Å¬·¡½º ŸÀÔÀÇ º¯¼ö·Î ¼­ºê Ŭ·¡½º ŸÀÔÀÇ °´Ã¼¸¦ °¡¸®Å³ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ¸»ÀÌ Á» ±äµ¥ °£´ÜÇÏ°Ô "ºÎ¸ð´Â ÀÚ½ÄÀ» °¡¸®Å³ ¼ö ÀÖ´Ù"¶ó°í ¿Ü¿ö µÎ¸é µÈ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ. Car, Truck Ŭ·¡½º ¼±¾ð¹®Àº ¾Õ ¿¹Á¦¿Í µ¿ÀÏÇÏ´Ù.

 

class JavaExam {

     public static void main(String args[]) {

          Car MyCar = new Car("Á¦³×½Ã½º", "»¡°­", true);

          Car YourCar = new Truck("ºÀ°í", "ÆĶû", true, 1500);

 

          MyCar.Run();

          YourCar.Run();

     }

}

 

Car ŸÀÔÀÇ MyCar°¡ Car °´Ã¼ÀÎ Á¦³×½Ã½º¸¦ ´ëÀÔ¹Þ´Â °ÍÀº ³Ê¹«³ª ´ç¿¬ÇÏ´Ù. ±×·¯³ª Car ŸÀÔÀÇ YourCar°¡ Truck ŸÀÔÀÇ °´Ã¼¸¦ ´ëÀÔ¹Þ´Â °ÍÀº ´Ù¼Ò ÀÌ»óÇØ º¸À̴µ¥ ÀÌ°ÍÀº ¾ÆÁÖ Á¤»óÀûÀÎ ¹®¹ýÀÌ´Ù. ºÎ¸ð ŸÀÔÀÇ YourCar º¯¼ö°¡ ÀÚ½Ä Å¸ÀÔÀÇ °´Ã¼ TruckÀ» ´ëÀÔ¹ÞÀº °ÍÀÌ´Ù.

ÀÌ°ÍÀÌ °¡´ÉÇÏ°í ³í¸®ÀûÀ¸·Î ¹®Á¦°¡ ¾ø´Â ÀÌÀ¯´Â ÀÚ½Ä °´Ã¼¿¡´Â ºÎ¸ð°¡ °¡Áø ¸ðµç ¸â¹ö°¡ Á¸ÀçÇϱ⠶§¹®ÀÌ´Ù. YourCar·Î È£ÃâÇÒ ¼ö ÀÖ´Â Run, Stop ¸Þ¼­µå´Â Æ®·°À¸·Îµµ °¡´ÉÇÑ µ¿ÀÛÀÌ´Ù. Æ®·°Àº ÀÏÁ¾ÀÇ ÀÚµ¿Â÷ÀÌ¸ç µû¶ó¼­ Àß ´Þ¸®°í Àß ¸ØÃá´Ù.

±×·¯³ª YourCar.Convey() È£ÃâÀº ¿¡·¯ 󸮵Ǵµ¥ Convey´Â Car Ŭ·¡½º¿¡ Á¤ÀÇµÈ ¸Þ¼­µå°¡ ¾Æ´Ï±â ¶§¹®ÀÌ´Ù. YourCar º¯¼ö´Â Car ŸÀÔÀ̹ǷΠCar¿¡ ¼ÓÇÑ ¸â¹ö¸¸ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù. ¸¸¾à YourCar·Î Convey¸¦ È£ÃâÇÏ°í ½Í¾ú´Ù¸é Truck ŸÀÔÀ¸·Î ¼±¾ðÇØ¾ß ÇÑ´Ù. ºÎ¸ð´Â ÀÚ½ÄÀ» °¡¸®Å³ ¼ö ÀÖÁö¸¸ ¹Ý´ë´Â ¾ÈµÈ´Ù. ¿Ö ¾ÈµÇ´ÂÁö ´ÙÀ½ Äڵ带 º¸ÀÚ.

 

Truck MyTruck = new Car("Á¦³×½Ã½º", "»¡°­", true);

MyTruck.Run();

MyTruck.Stop();

MyTruck.Convey();

 

MyTruck´Â Truck ŸÀÔÀ̹ǷΠÀÌ º¯¼ö·Î Convey¸¦ È£ÃâÇÏ´Â °ÍÀÌ °¡´ÉÇØ¾ß ÇÑ´Ù. ±×·¯³ª ÀÚ½Ä Å¸ÀÔÀÇ º¯¼ö¿¡ ºÎ¸ð ŸÀÔÀÇ °´Ã¼¸¦ ´ëÀÔÇÏ¸é ³í¸®ÀûÀ¸·Î ºÒ°¡´ÉÇÑ µ¿ÀÛÀ» ¼öÇàÇÒ À§ÇèÀÌ ÀÖ´Ù. Á¦³×½Ã½º´Â Â÷ÀÇ ÀÏÁ¾ÀÏ »ÓÀÌÁö Æ®·°Àº ¾Æ´Ï¹Ç·Î ÁüÀ» ½Æ´Â ´É·ÂÀº ¾ø´Ù. ±×·¡¼­ ¾Æ¿¹ ´ëÀÔÀÌ Çã¶ôµÇÁö ¾Ê´Â´Ù.

±×·¸´Ù¸é ºÎ¸ð°¡ ÀÚ½ÄÀ» °¡¸®Å°´Â °ÍÀº ¾î¶² ÀåÁ¡ÀÌ ÀÖÀ»±î? À§ ¿¹Á¦Ã³·³ ÄÄÆÄÀϽÿ¡ º¯¼öÀÇ Å¸ÀÔÀ» ºÐ¸íÈ÷ ¾Ë ¼ö ÀÖ´Â °æ¿ì´Â µü ¸Â´Â ŸÀÔÀ¸·Î ¼±¾ðÇÏ¸é µÈ´Ù. ±×·¯³ª ½ÇÇà½Ã¿¡ ŸÀÔÀÌ °áÁ¤µÉ ¶§´Â ÀϹÝÀûÀΠŸÀÔÀ¸·Î °´Ã¼¸¦ ¹Þ¾Æ¾ß ÇÑ´Ù. ´ëÇ¥ÀûÀÎ ¿¹°¡ ¸Þ¼­µåÀÇ Àμö·Î °´Ã¼¸¦ ¹ÞÀ» ¶§ÀÌ´Ù.

 

class JavaExam {

     public static void TestCar(Car car) {

          car.Run();

          car.Stop();

     }

     public static void main(String args[]) {

          Car MyCar = new Car("Á¦³×½Ã½º", "»¡°­", true);

          Car YourCar = new Truck("ºÀ°í", "ÆĶû", true, 1500);

 

          TestCar(MyCar);

          TestCar(YourCar);

     }

}

 

ÀÌ ¿¹Á¦ÀÇ TestCar ¸Þ¼­µå´Â Àμö·Î Àü´Þ¹ÞÀº Â÷°¡ Á¦ ¼º´ÉÀ» ¹ßÈÖÇÏ´ÂÁö¸¦ Å×½ºÆ®ÇÑ´Ù. ½Ã¿îÀüÀ» ÇÏ´Â °Í¿¡ ºñÀ¯ÇÒ ¼ö ÀÖ°Ú´Ù. Â÷¶ó´Â °ÍÀº ÀÏ´Ü ´Þ¸± ¼ö ÀÖ°í ¸ØÃâ ¼ö ÀÖ¾î¾ß ÇϹǷΠRun°ú StopÀ» È£ÃâÇØ º»´Ù. ½Ã¿îÀüÇÒ ´ë»óÀº Â÷ÀÇ ÀÏÁ¾ÀÌ¸é µÇ¹Ç·Î ÀÌ ¸Þ¼­µå´Â Àμö·Î Car ŸÀÔÀÇ °´Ã¼¸¦ ¹Þ´Â´Ù. ÁüÀ» Àß ½Æ´Â°¡´Â Å×½ºÆ® ´ë»óÀÌ ¾Æ´Ï¹Ç·Î TruckÀ» Àμö·Î ¹ÞÁö ¾Ê´Â´Ù.

TestCar°¡ Car ŸÀÔÀ» ¹ÞÀ¸¹Ç·Î Car·ÎºÎÅÍ ÆÄ»ýµÈ ¸ðµç °´Ã¼¸¦ ´Ù Å×½ºÆ®ÇÒ ¼ö ÀÖ´Ù. Æ®·°»Ó¸¸ ¾Æ´Ï¶ó ¹ö½º, ÅÊÅ©·Î¸®, Æ®·¹ÀÏ·¯, ½ÉÁö¾î ¶ËÂ÷±îÁöµµ ´Ù °¡´ÉÇÏ´Ù. ¿Ö³ÄÇÏ¸é ¸ðµÎ Â÷ÀÇ ÀÏÁ¾À̸ç Run, Stop ¸Þ¼­µå¸¦ Áö¿øÇϱ⠶§¹®ÀÌ´Ù. ¸¸¾à Car ŸÀÔÀ¸·Î ÆÄ»ý Ŭ·¡½ºÀÇ °´Ã¼¸¦ ¹ÞÀ» ¼ö ¾ø´Ù¸é TestCar, TestTruck, TestBus °°Àº ¸Þ¼­µå¸¦ ÀÏÀÏÀÌ ¸¸µé¾î¾ß ÇÒ °ÍÀÌ´Ù. ½Ã¿îÀü Ç׸ñ¿¡ ÁüÀ» Àß ½Æ´ÂÁö, ¶ËÀ» Àß Çª´ÂÁöµµ Æ÷ÇԵǾî ÀÖ´Ù¸é ¹°·Ð ±×·¡¾ß°ÚÁö¸¸ ÀϹÝÀûÀÎ ÀÚµ¿Â÷¸¦ ´ë»óÀ¸·Î ÇÑ´Ù¸é ±»ÀÌ ±×·² ÇÊ¿ä°¡ ¾ø´Â °ÍÀÌ´Ù.

¿©±â±îÁö "ºÎ¸ð´Â ÀÚ½ÄÀ» °¡¸®Å³ ¼ö ÀÖ´Ù"´Â °ÍÀ» ¼³¸íÇß´Ù. ±×·¸´Ù¸é ÀÚ½ÄÀ» °¡¸®Å°´Â »óÅ¿¡¼­ ¾î¶² ¸Þ¼­µå°¡ È£ÃâµÇ´ÂÁö¸¦ »ìÆì º¸ÀÚ. À§ ¿¹Á¦ÀÇ ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.

 

ºÎ¸ª ºÎ¸ª

³¢ÀÌÀÍ

¿ì´çÅÁ ÄôÅÁ

³¢ÀÌÀÍ

 

MyCar³ª YourCar³ª StopÀº ¸ðµÎ Car¿¡ Á¤ÀÇµÈ ¸Þ¼­µå¸¦ È£ÃâÇϹǷΠµ¿ÀÛÀÌ °°´Ù. ±×·¯³ª Run ¸Þ¼­µå´Â Car¿¡ Á¤ÀǵǾî ÀÖ°í Truck¿¡¼­ ÀçÁ¤ÀÇÇßÀ¸¹Ç·Î È£ÃâÇÏ´Â °´Ã¼¿¡ µû¶ó µ¿ÀÛÀÌ ´Þ¶óÁø´Ù. Á¦³×½Ã½º´Â ºÎ¸ª ºÎ¸ªÀÌ°í ºÀ°í´Â ¿ì´çÅÁ ÄôÅÁÀÌ´Ù. ÀÌ·± °á°ú°¡ ´ç¿¬ÇØ º¸ÀÏÁö ¸ð¸£°ÚÁö¸¸ ³»ºÎÀûÀ¸·Î´Â »ó´çÈ÷ º¹ÀâÇÏ°Ô Ã³¸®µÈ´Ù.

Ŭ·¡½º ŸÀÔÀÇ º¯¼ö·ÎºÎÅÍ ¸Þ¼­µå¸¦ È£ÃâÇÏ¸é º¯¼ö ÀÚüÀÇ Å¸ÀÔÀ» µû¸£´Â °ÍÀÌ ¾Æ´Ï¶ó º¯¼ö°¡ ½ÇÁ¦·Î °¡¸®Å°´Â °´Ã¼ÀÇ Å¸ÀÔÀ» µû¸¥´Ù. TestCar ¸Þ¼­µåÀÇ Àμö car°¡ Car ŸÀÔÀ̶ó°í Çؼ­ Run ¸Þ¼­µå°¡ ¹«Á¶°Ç Car.RunÀÌ ¾Æ´Ï¶ó car¿¡ ¾î¶² ŸÀÔÀÇ °´Ã¼°¡ Àü´ÞµÇ¾ú´Â°¡¿¡ µû¶ó È£ÃâµÇ´Â ÇÔ¼ö°¡ ´Þ¶óÁø´Ù´Â ¶æÀÌ´Ù. car·Î MyCar°¡ Àü´ÞµÇ¸é Car.RunÀÌ È£ÃâµÇ°í YourCar°¡ Àü´ÞµÇ¸é Truck.RunÀÌ È£ÃâµÈ´Ù.

ÀÌ·¸°Ô µÇ±â À§Çؼ­´Â car.Run() À̶ó´Â È£Ãâ¹®ÀÌ ¾î¶² ¸Þ¼­µå¸¦ È£ÃâÇÒ °ÍÀΰ¡´Â ÄÄÆÄÀÏ Å¸ÀÓ¿¡ °áÁ¤µÇ´Â °ÍÀÌ ¾Æ´Ï¶ó ·±Å¸ÀÓ¿¡ °áÁ¤µÇ¾î¾ß ÇÑ´Ù. ¾î¶² Àμö°¡ Àü´ÞµÉÁö ÄÄÆÄÀÏÇÒ ¶§´Â ¾Ë ¼ö ¾øÀ¸¹Ç·Î ¹Ì¸® °áÁ¤ÇØ ³õÀ» ¼ö ¾øÀ¸¸ç ¸Þ¼­µå°¡ È£ÃâµÇ¾î ºÁ¾ß ¾Ë ¼ö ÀÖ´Ù. È£ÃâµÉ ¸Þ¼­µå¸¦ ½ÇÇà½Ã¿¡ °áÁ¤ÇÏ´Â ¹æ½ÄÀ» ´ÊÀº ¹ÙÀεù ¶Ç´Â µ¿Àû ¹ÙÀεùÀ̶ó°í ÇÑ´Ù. À§ ¿¹Á¦ÀÇ Run ¸Þ¼­µå°¡ ¹Ù·Î µ¿Àû ¹ÙÀεùÀ» ÇÏ´Â °ÍÀÌ´Ù.

C++¿¡µµ ÀÌ¿Í µ¿ÀÏÇÑ °³³äÀÇ ÇÔ¼ö°¡ Àִµ¥ ¹Ù·Î °¡»ó ÇÔ¼öÀÌ´Ù. µ¿Àû ¹ÙÀεùÀ» ÇØ¾ß ÇÏ´Â ÇÔ¼ö ¾Õ¿¡ virtual ÁöÁ¤ÀÚ¸¦ ºÙ¿© °¡»ó ÇÔ¼ö·Î ¼±¾ðÇØ¾ß ÇÑ´Ù. ±×·¯³ª ÀÚ¹ÙÀÇ °æ¿ì´Â ´Ù¸£´Ù. ÀÚ¹Ù´Â C++°ú ´Þ¸® ¸ðµç ¸Þ¼­µå°¡ ¹«Á¶°Ç °¡»óÀÌ´Ù. µû¶ó¼­ °¡»ó ¸Þ¼­µå¶ó´Â ÁöÁ¤À» º°µµ·Î ÇÏÁö ¾Ê¾Æµµ µÈ´Ù. ÀÌ Á¡ÀÌ C++°ú ÀÚ¹ÙÀÇ Å« Â÷ÀÌÁ¡ÀÌ´Ù.

C++ÀÌ °¡»ó ÇÔ¼ö¿¡ ´ëÇÑ ¸í½ÃÀûÀÎ ÁöÁ¤À» ¿ä±¸ÇÏ´Â ÀÌÀ¯´Â ¼º´É ¶§¹®ÀÌ´Ù. °¡»ó ÇÔ¼ö Å×À̺íÀ» À§ÇÑ ¸Þ¸ð¸®°¡ ¼Ò¸ðµÇ°í ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§µµ Å×À̺íÀ» µÚÁ® ½ÇÁ¦ È£ÃâÇÒ ¹øÁö¸¦ ã´Â ¼Óµµ»óÀÇ ºÒÀÌÀÍÀÌ ¹ß»ýÇÑ´Ù. ±×·¡¼­ µ¿Àû ¹ÙÀεùÀÌ ²À ÇÊ¿äÇÑ ÇÔ¼ö¿¡ ´ëÇؼ­¸¸ °¡»ó ÇÔ¼ö·Î ÁöÁ¤ÇØ¾ß ÇÏ¸ç ±×·¸Áö ¾ÊÀº ÇÔ¼ö´Â ºñ°¡»óÀ¸·Î µ¿ÀÛÇÑ´Ù. ÃÖ´ëÇÑÀÇ ¼º´ÉÀ» ²ø¾î ³»±â À§ÇØ ÇÔ¼öÀÇ µ¿Àû ¹ÙÀεù ¿©ºÎ¸¦ °³¹ßÀÚ°¡ ¼öµ¿À¸·Î ¼±ÅÃÇϵµ·Ï µÇ¾î ÀÖ´Ù.

±×·¯³ª ÀÚ¹Ù´Â ¸ðµç ¸Þ¼­µå¸¦ °¡»óÀ¸·Î ¼±¾ðÇϴµ¥ ÀÌ´Â ¼º´É ´ë½Å ÆíÀǼº°ú ¾ÈÀü¼º¿¡ ¿ªÁ¡À» µÎ°Ú´Ù´Â ÀÛÀüÀÌ´Ù. °¡»óÀ̾î¾ß ÇÒ ÇÔ¼ö¸¦ ºñ°¡»óÀ¸·Î ¼±¾ðÇÏ¸é ¿Àµ¿ÀÛÇÏÁö¸¸ ºñ°¡»óÀ̾ µÉ ÇÔ¼ö¸¦ °¡»óÀ¸·Î ¼±¾ðÇÑ´Ù°í Çؼ­ ¹®Á¦°¡ »ý±âÁö´Â ¾Ê´Â´Ù. ÀÚ¹Ù´Â ¾à°£ÀÇ ¼º´É °¨¼Ò¸¦ Èñ»ýÇÏ´õ¶óµµ °³¹ßÀÚ°¡ ÆíÇÑÂÊÀ¸·Î ¼³°èµÇ¾î ÀÖ´Â °ÍÀÌ´Ù. ´ÙÇàÈ÷ °¡»ó ÇÔ¼ö¿¡ ÀÇÇÑ ¼º´É»óÀÇ ºÒÀÌÀÍÀº »ç½Ç»ó ¹«½ÃÇصµ µÉ Á¤µµ·Î °æ¹ÌÇÏ´Ù.

ÀÌ ºÎºÐ¿¡¼­ ÀÚ¹Ù¿Í C++ÀÇ Ã¶ÇлóÀÇ Â÷ÀÌ°¡ °¡Àå ¸í¹éÇÏ°Ô µå·¯³­´Ù. C++Àº ÀÚ³ª ±ú³ª ¼º´É À§ÁÖÀ̸ç ÀÚ¹Ù´Â Ç×»ó ¼º´Éº¸´Ù ÆíÀǼº, ¾ÈÀü¼ºÀÌ ¿ì¼±ÀÎ °ÍÀÌ´Ù. Á» ºñ°üÀûÀ¸·Î ¾ê±âÇÏÀÚ¸é C++Àº ¿ö³« ¼º´ÉÀÌ ÁÁ¾Æ µ¿Àû ¹ÙÀεù¿¡ ÀÇÇÑ ¼º´É»óÀÇ ºÒÀÌÀÍÀÌ Å©Áö¸¸ ÀÚ¹Ù´Â ¿ø·¡ºÎÅÍ ´À·Á ÅÍÁ³±â ¶§¹®¿¡ µ¿Àû ¹ÙÀεù¿¡ ÀÇÇÑ ¼º´É °¨¼Ò°¡ »ó´ëÀûÀ¸·Î ÀÛ°Ô Æò°¡µÇ´Â °ÍÀÌ´Ù. ¼º´ÉÀÇ °üÁ¡¿¡¼­ º»´Ù¸é ¿ª½Ã C++ÀÌ ¿ìÀ§¸¦ Á¡ÇÏÁö¸¸ Çö´ëÀûÀÎ °í¼º´É Çϵå¿þ¾î ȯ°æ¿¡¼­´Â ´ç¿¬È÷ ÀÚ¹ÙÀÇ ¼±ÅÃÀÌ Çö¸íÇÏ´Ù°í º¼ ¼ö ÀÖ´Ù.

°´Ã¼ ij½ºÆÃ

ºÎ¸ð´Â ÀÚ½ÄÀ» °¡¸®Å³ ¼ö ÀÖÁö¸¸ ÀÚ½ÄÀº ºÎ¸ð¸¦ °¡¸®Å³ ¼ö ¾ø´Ù. ÀÌ°ÍÀº ´ç¿¬ÇÑ ¿øÄ¢ÀÌ´Ù. ±×·¯³ª ¶§·Î´Â ÀÚ½Ä Å¸ÀÔÀÇ º¯¼ö°¡ ºÎ¸ð ŸÀÔÀÇ °´Ã¼¸¦ ´ëÀÔ¹Þ¾Æ¾ß ÇÏ´Â °æ¿ìµµ ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.

 

class JavaExam {

     public static void main(String args[]) {

          Car MyTruck = new Truck("ºÀ°í", "ÆĶû", true, 1500);

 

          Truck AnyTruck;

          AnyTruck = MyTruck;       // ¿¡·¯ ¹ß»ý

          AnyTruck.Convey();

     }

}

 

MyTruckÀ» Car ŸÀÔÀ¸·Î ¼±¾ðÇØ ³õ°í Truck °´Ã¼¸¦ ´ëÀÔÇߴµ¥ ¾Õ¿¡¼­ ¾Ë¾Æ ºÃµíÀÌ ºÎ¸ð´Â ÀÚ½ÄÀ» °¡¸®Å³ ¼ö ÀÖÀ¸¹Ç·Î ÀÌ ´ëÀÔÀº Ç×»ó °¡´ÉÇÏ´Ù. ÀÌ »óÅ¿¡¼­ Truck ŸÀÔÀÇ AnyTruck º¯¼ö¸¦ ¼±¾ðÇØ ³õ°í MyTruck°´Ã¼¸¦ ´ëÀÔÇØ º¸¾Ò´Ù. AnyTruck = MyTruck ´ëÀÔ¹®Àº º¯¼ö¸íÀ¸·Î¸¸ º¸¸é °¡´ÉÇÒ °Í °°Áö¸¸ ÄÄÆÄÀÏÇØ º¸¸é ¿¡·¯ 󸮵ȴÙ.

¿Ö³ÄÇϸé MyTruckÀÇ ¼±¾ð ŸÀÔÀÌ ºÎ¸ðÀÎ CarÀÌ°í ÀÌ °ªÀ» ´ëÀÔ¹ÞÀº AnyTruckÀº ÀÚ½ÄÀÎ Truck ŸÀÔÀ¸·Î ¼±¾ðµÇ¾î Àֱ⠶§¹®ÀÌ´Ù.  ÀÚ½Ä Å¸ÀÔÀÇ º¯¼ö°¡ ºÎ¸ð ŸÀÔÀÇ °´Ã¼¸¦ °¡¸®Å°¸é ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. Truck ŸÀÔÀÇ AnyTruckÀ¸·Î Convey¸¦ È£ÃâÇÏ´Â °ÍÀº ´ç¿¬È÷ ÇÕ¹ýÀûÀε¥ AnyTruckÀÌ °¡¸®Å°´Â °´Ã¼°¡ Car ŸÀÔÀ̶ó¸é ÀÌ µ¿ÀÛÀ» ó¸®ÇÒ ¼ö ¾ø±â ¶§¹®ÀÌ´Ù.

±×·¯³ª À§ ¿¹Á¦¿¡¼­ ºñ·Ï MyTruckÀº Car ŸÀÔÀÌÁö¸¸ ºÐ¸íÈ÷ Truck °´Ã¼¸¦ °¡¸®Å°°í ÀÖ´Ù. µû¶ó¼­ AnyTruck¿¡ ´ëÀÔÇصµ Convey°¡ ¹«»çÈ÷ ½ÇÇàµÉ °ÍÀÌ´Ù. ¹®Á¦´Â ÄÄÆÄÀÏ·¯°¡ MyTruck¿¡ ¾î¶² °´Ã¼°¡ ´ëÀԵǾú´ÂÁö¸¦ È®ÀÎÇÒ ¼ö ¾ø±â ¶§¹®¿¡ µýÁö¸¦ °Ç´Ù´Â °ÍÀÌ´Ù. MyTruckÀº º¯¼öÀ̹ǷΠ½ÇÇàÁß¿¡ Car ¼­ºê Ŭ·¡½ºÀÇ ¸ðµç °´Ã¼¸¦ ´ëÀÔ¹ÞÀ» ¼ö ÀÖÀ¸¹Ç·Î ÄÄÆÄÀÏ Áß¿¡ MyTruckÀÌ ¾î¶² º¯¼ö¸¦ °¡¸®Å³Áö¸¦ ÆÇ´ÜÇÏ´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù.

ÄÄÆÄÀÏ·¯´Â ¿ö³« ¼Ò½ÉÇؼ­ Á¶±ÝÀÌ¶óµµ À§ÇèÇÒ °¡´É¼ºÀÌ ÀÖ´Â ¸ðµç ´ëÀÔ¹®À» ¿¡·¯ ó¸®ÇÑ´Ù. ÀÌ·² ¶§´Â °³¹ßÀÚ°¡ ij½ºÆ® ¿¬»êÀÚ·Î °­Á¦ ij½ºÆÃÀ» ÇØ¾ß ÇÑ´Ù. Äڵ带 ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÏ¸é ¹«»çÈ÷ Àß ÄÄÆÄÀ쵃 °ÍÀÌ´Ù.

 

AnyTruck = (Truck)MyTruck;

 

ÀÌ Ä³½ºÆÃÀº MyTruckÀÌ Truck ŸÀÔÀÇ °´Ã¼¸¦ °¡¸®Å°°í ÀÖ´Ù´Â °ÍÀ» ¸í½ÃÀûÀ¸·Î ¹àÈûÀ¸·Î½á ÄÄÆÄÀÏ·¯¿¡°Ô ÀÌ»ó¾øÀ¸´Ï ´ëÀÔÇ϶ó´Â °ÍÀ» Áö½ÃÇÑ´Ù. °´Ã¼¿¡ ´ëÇÑ Ä³½ºÆ® ¿¬»êÀÚ´Â °´Ã¼ÀÇ ½ÇÁ¦ ŸÀÔÀ» º¯°æÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ´ëÀÔ °¡´ÉÇÑ Å¸ÀÔÀÓÀ» ÄÄÆÄÀÏ·¯¿¡°Ô ¾Ë¸®±â¸¸ ÇÒ »ÓÀÌ´Ù. MyTruckÀº ºñ·Ï Car ŸÀÔÀ¸·Î ¼±¾ðµÇ¾úÁö¸¸ ºÐ¸íÈ÷ Truck °´Ã¼¸¦ °¡¸®Å°°í ÀÖÀ½À» °³¹ßÀÚ°¡ È®½ÇÈ÷ ¾Ë¸²À¸·Î½á ÄÄÆÄÀÏ·¯ÀÇ Å¸ÀÔ Ã¼Å©¸¦ Àá½Ã ¹«´ÉÈ­½ÃÅ°´Â °ÍÀÌ´Ù. ¸¸¾à ij½ºÆ® ¿¬»êÀÚ°¡ À߸ø »ç¿ëµÈ °ÍÀ̶ó¸é ±× °á°ú´Â Ä¡¸íÀûÀÌ´Ù. ´ÙÀ½ Äڵ带 º¸ÀÚ.

 

Car Pride = new Car("ÇÁ¶óÀ̵å", "»¡°­", true);

 

Truck AnyTruck;

AnyTruck = (Truck)Pride;

AnyTruck.Convey();

 

Pride´Â Car ŸÀÔÀ¸·Î ¼±¾ðµÇ¾î ÀÖÀ¸¸ç ½ÇÁ¦ ´ëÀÔ¹ÞÀº °Íµµ Car ŸÀÔÀÇ °´Ã¼ÀÌ´Ù. ÀÌ »óȲ¿¡¼­ AnyTruck¿¡ Pride¸¦ ´ëÀÔÇߴµ¥ Á¿ìÀÇ Å¸ÀÔÀÌ ºÐ¸íÈ÷ ¸ÂÁö ¾Ê´Ù. ÇÏÁö¸¸ ÄÄÆÄÀÏ·¯´Â Pride ¾Õ¿¡ ºÙÀº ij½ºÆ® ¿¬»êÀÚ¸¦ º¸°í ÀÌ ´ëÀÔÀÌ °¡´ÉÇÏ´Ù°í ÆÇ´ÜÇÏ¿© ¿¡·¯¸¦ ³»Áö ¾Ê´Â´Ù. ÄÄÆÄÀÏÀº ¹«»çÈ÷ µÇÁö¸¸ ¸·»ó ½ÇÇàÇØ º¸¸é ¿¹¿Ü°¡ ¹ß»ýÇϸç Á¦´ë·Î ½ÇÇàµÇÁö ¾Ê´Â´Ù.

 

Exception in thread "main" java.lang.ClassCastException: Car cannot be cast to Truck

          at JavaExam.main(JavaExam.java:123)

 

Pride °´Ã¼¿¡´Â Convey ¸Þ¼­µå°¡ ¾øÀ¸¹Ç·Î ¾û¶×ÇÑ ¹øÁö·Î Á¡ÇÁ¸¦ ÇÏ¿© ÇÁ·Î±×·¥ÀÌ ÆøÁÖÇØ ¹ö¸®´Â °ÍÀÌ´Ù. º¸´Ù½ÃÇÇ Ä³½ºÆ® ¿¬»êÀº °´Ã¼ÀÇ Å¸ÀÔÀ» °­Á¦·Î ¹Ù²Ù¾î ´ëÀÔÀ» °¡´ÉÄÉ ÇÏÁö¸¸ °æ¿ì¿¡ µû¶ó¼­´Â »ó´çÈ÷ À§ÇèÇÒ ¼ö ÀÖ´Ù.

°´Ã¼ÀÇ Å¸ÀÔÀ» ¾ÈÀüÇÏ°Ô º¯°æÇÏ·Á¸é º¯¼ö°¡ ij½ºÆÃÇÏ°íÀÚ Çϴ Ŭ·¡½º ŸÀÔÀÇ °´Ã¼¸¦ °¡¸®Å°°í ÀÖ´ÂÁö¸¦ Á¶»çÇØ¾ß ÇÑ´Ù. ŸÀÔÀ» Á¶»çÇÏ´Â ¿¬»êÀº instanceof ¿¬»êÀÚ°¡ ¼öÇàÇÑ´Ù. ±âº» Çü½ÄÀº ´ÙÀ½°ú °°´Ù. Áº¯¿¡ °´Ã¼¸¦ ¾²°í ¿ìº¯¿¡ ŸÀÔÀ» ¾´´Ù.

 

°´Ã¼ instanceof Ŭ·¡½º

 

°´Ã¼°¡ Ŭ·¡½º ŸÀÔÀÌ ¸ÂÀ¸¸é true¸¦ ¸®ÅÏÇϴµ¥ À̶§´Â ¾ÈÀüÇϹǷΠij½ºÆÃÀ» Çصµ µÈ´Ù. false¸¦ ¸®ÅÏÇϸé ŸÀÔÀÌ ´Ù¸£¹Ç·Î ij½ºÆÃÀ» Çؼ­´Â ¾ÈµÈ´Ù. ÀÌ ¿¬»êÀÚ´Â ÄÄÆÄÀÏÇÒ ¶§ ŸÀÔÀ» Á¡°ËÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ½ÇÇàÁß¿¡ °´Ã¼ÀÇ Å¸ÀÔÀ» Á¡°ËÇϹǷΠÇ×»ó Á¤È®ÇÏ´Ù.

À§¿¡¼­ º¸ÀÎ ¿¹Á¦ ÄÚµåµéÀº »óȲÀÌ Á» º¹ÀâÇؼ­ Àß ½Ç°¨ÀÌ ³ªÁö ¾ÊÀ¸¸ç ¼³¸íÀ» À§ÇØ ÀǵµÀûÀ¸·Î ŸÀÔÀ» ´Ù¸£°Ô ¼±¾ðÇÏ´Ù º¸´Ï Á» ¾ïÁö½º·¯¿ö º¸À̱⵵ ÇÑ´Ù. »ç½Ç À§ Äڵ忡¼­ MyTruckÀ» Truck ŸÀÔÀ¸·Î ¼±¾ðÇϱ⸸ ÇÏ¸é ¾Æ¹« ¹®Á¦°¡ ¾ø´Ù. ¹Ù·Î ¾Æ·¡¿¡¼­ »ç¿ëÇÒ °´Ã¼¸¦ ±»ÀÌ ºÎ¸ð ŸÀÔÀ¸·Î ¼±¾ðÇÒ ÀÌÀ¯°¡ ¾ø´Â °ÍÀÌ´Ù. ±×·¯³ª ¸Þ¼­µå³¢¸® °´Ã¼¸¦ Àü´Þ¹ÞÀ» ¶§´Â ÀÌ·± »óȲÀÌ ÀÚÁÖ ¹ß»ýÇÑ´Ù. ´ÙÀ½ ¿¹Á¦´Â Á» ´õ Á÷°üÀûÀÌ´Ù.

 

class JavaExam {

     public static void TestCar(Car car) {

          car.Run();

          car.Stop();

          if (car instanceof Truck) {

              Truck truck = (Truck)car;

              truck.Convey();

          }

     }

 

     public static void main(String args[]) {

          Car[] arCar = {

              new Car("±×·£Àú", "°ËÁ¤", true),

              new Truck("Æ÷ÅÍ", "ÆĶû", false, 1500),

              new Car("¼Ò³ªÅ¸", "ÇϾç", true),

          };

 

          for (Car car: arCar) {

              TestCar(car);

          }

     }

}

 

arCar ¹è¿­Àº ÀÚµ¿Â÷ °´Ã¼ÀÇ ÁýÇÕÀ» ÀúÀåÇÑ´Ù. ÀÌ ¹è¿­¿¡ Car Ŭ·¡½º·ÎºÎÅÍ ÆÄ»ýµÇ´Â Æ®·°, ¹ö½º, ÅýÃ, ÅÊÅ©·Î¸® µîµîÀÇ ¸ðµç °´Ã¼µéÀ» ´Ù ÀúÀåÇØÇϹǷΠÃÖ»óÀ§ ŸÀÔÀÎ Car Ŭ·¡½º ŸÀÔÀ̾î¾ß ÇÑ´Ù. ÀÌ ¿¹Á¦¿¡´Â ºñ·Ï Car ¼­ºê Ŭ·¡½º°¡ Çϳª ¹Û¿¡ ¾øÁö¸¸ ½ÇÁ¦ ¿¹¿¡¼­´Â ¾ÆÁÖ ¸¹¾ÆÁú ¼ö ÀÖ´Ù. ¹è¿­¿¡´Â Car °´Ã¼¿Í Truck °´Ã¼¸¦ »ý¼ºÇؼ­ ÃʱâÈ­Çß´Ù. ±×·£Àú³ª ¼Ò³ªÅ¸»Ó¸¸ ¾Æ´Ï¶ó Æ÷Å͵µ ºÐ¸íÈ÷ ÀÚµ¿Â÷ À̹ǷΠarCar ¹è¿­¿¡ ÀúÀåÇÒ ¼ö ÀÖÀ½Àº ´ç¿¬ÇÏ´Ù.

ÀÌ »óÅ¿¡¼­ ¹è¿­¿¡ ÀúÀåµÈ ¸ðµç ÀÚµ¿Â÷µéÀ» ½Ã¿îÀüÇØ º»´Ù°í ÇØ º¸ÀÚ. TestCar ¸Þ¼­µå´Â ÀϹÝÀûÀÎ ÀÚµ¿Â÷¸¦ Àü´Þ¹Þ¾Æ¾ß ÇϹǷΠÀμö carÀÇ Å¸ÀÔÀº ´ç¿¬È÷ CarÀ̸ç ÀÌ Àμö·Î Car °´Ã¼´Â ¹°·ÐÀÌ°í Truck °´Ã¼µµ ´ëÀÔ¹ÞÀ» ¼ö ÀÖ´Ù. ¿©±â¼­ º¯¼ö¿Í ´ëÀԵǴ °´Ã¼ÀÇ Å¸ÀÔ ºÒÀÏÄ¡°¡ ¹ß»ýÇÏ´Â °ÍÀÌ´Ù. TestCar´Â ÀÏ´Ü Run, StopÀ» È£ÃâÇÏ¿© Àß °¡´ÂÁö, Àß ¼­´ÂÁö¸¦ Å×½ºÆ®Çϴµ¥ ÀÌ µÎ ¸Þ¼­µå´Â Car ¼Ò¼ÓÀ̹ǷΠ¸ðµç ÀÚµ¿Â÷°¡ Áö¿øÇÑ´Ù.

´ÙÀ½Àº Æ®·°ÀÎ °æ¿ì¿¡ ÇÑÇØ ÁüÀ» Àß ½Ç¾î ³ª¸£´ÂÁöµµ °°ÀÌ Å×½ºÆ®ÇØ º»´Ù. À̶§ carÀÇ Convey ¸Þ¼­µå¸¦ ¹«ÀÛÁ¤ È£ÃâÇØ ¹ö¸®¸é ¾ÈµÈ´Ù. car°¡ Car °´Ã¼¸¦ °¡¸®Å³ ¼öµµ ÀÖ°í Truck °´Ã¼¸¦ °¡¸®Å³ ¼öµµ Àִµ¥ Àμö·Î Àü´ÞµÈ °´Ã¼°¡ TruckÀÇ ÀÏÁ¾ÀÏ ¶§¸¸ Convey¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ÀÌ ÆÇ´ÜÀ» ¹Ù·Î instanceof ¿¬»êÀÚ°¡ ¼öÇàÇÏ´Â °ÍÀÌ´Ù. car°¡ TruckÀÇ °´Ã¼À̸é car¸¦ (Truck) ŸÀÔÀ¸·Î ¾ÈÀüÇÏ°Ô Ä³½ºÆÃÇÏ¿© Truck ŸÀÔÀÇ truck º¯¼ö¿¡ ´ëÀÔÇÒ ¼ö ÀÖ´Ù. ±×¸®°í Convey¸¦ È£ÃâÇÏ¸é µÈ´Ù. Àӽà °´Ã¼¿¡ ´ëÀÔ¹Þ´Â °ÍÀÌ ±ÍÂú´Ù¸é ij½ºÆÃÇÑ ÈÄ ¹Ù·Î È£ÃâÇصµ »ó°ü¾ø´Ù.

 

((Truck)car).Convey();

 

car¸¦ TruckÀ¸·Î ij½ºÆÃÇÑ ÈÄ Convey¸¦ ¹Ù·Î È£ÃâÇÒ °ÍÀÌ´Ù. À̶§ . ¿¬»êÀÚ°¡ ij½ºÆ® ¿¬»êÀÚº¸´Ù ¿ì¼± ¼øÀ§°¡ ³ôÀ¸¹Ç·Î ij½ºÆ® ¿¬»ê½ÄÀ» °ýÈ£·Î ½Î¼­ ij½ºÆÃÀ» ¸ÕÀú ¼öÇàÇÑ ÈÄ ¸â¹ö¸¦ ã¾Æ¾ß ÇÑ´Ù. TestCar ¸Þ¼­µå´Â ¸ðµç ÀÚµ¿Â÷¸¦ Å×½ºÆ®Ç쵂 Àü´ÞµÈ ÀÚµ¿Â÷°¡ Æ®·°À̸é ÁüÀ» Àß ½Æ´ÂÁöµµ Å×½ºÆ®ÇÑ´Ù. ¸¸¾à ½ÇÇàÁß¿¡ °´Ã¼ÀÇ Å¸ÀÔÀ» ÆǺ°ÇÏ´Â ¹æ¹ýÀÌ ¾ø´Ù¸é TestCar, TestTruck ÇÔ¼ö¸¦ µû·Î ¸¸µé¾î¾ß ÇÒ °ÍÀÌ´Ù.

instanceof ¿¬»êÀÚ°¡ ¼öÇàÇÏ´Â ¿¬»êÀº °´Ã¼ÀÇ µ¿Àû ŸÀÔÀ» Á¶»çÇÏ´Â °ÍÀÌ´Ù. ÀÌ ¿¬»êÀÌ °¡´ÉÇϱâ À§Çؼ­´Â °´Ã¼¾È¿¡ ÀÚ½ÅÀÇ Å¸ÀÔÀÌ ¹«¾ùÀÎÁö¸¦ ±â¾ïÇÏ´Â Á¤º¸°¡ µû·Î ÀúÀåµÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. Áï, º°µµÀÇ ¸Þ¸ð¸®°¡ ´õ µé¾î°¡¾ß ÇÏ´Â ±â´ÉÀÌ´Ù. C++¿¡µµ RTTI¶ó´Â µ¿ÀÏÇÑ ±â´ÉÀÌ Àִµ¥ ¸Þ¸ð¸®°¡ ¼Ò¸ðµÇ´Â ±â´ÉÀ̱⠶§¹®¿¡ ÄÄÆÄÀÏ·¯ÀÇ ¿É¼ÇÀ¸·Î ¼±ÅÃÇϵµ·Ï µÇ¾î ÀÖÀ¸¸ç µðÆúÆ®·Î ÀÌ ±â´ÉÀº ¼±ÅõǾî ÀÖÁö ¾Ê´Ù.

±×·¡¼­ C++Àº ±âº»ÀûÀ¸·Î µ¿Àû ŸÀÔ Á¡°ËÀÌ ºÒ°¡´ÉÇÏ¸ç ¿É¼ÇÀ» ÄѾ߸¸ ÀÌ ±â´ÉÀ» ¾µ ¼ö ÀÖ´Ù. ¹Ý¸é ÀÚ¹Ù´Â µðÆúÆ®·Î µ¿Àû ŸÀÔ Á¡°ËÀ» Áö¿øÇÑ´Ù. ÀÌ·± Â÷ÀÌÁ¡ÀÌ ¹ß»ýÇÏ´Â ÀÌÀ¯µµ ¿ª½Ã ¼º´É ¶§¹®ÀÌ´Ù. C++Àº ¼º´É¿¡ Á¶±ÝÀÌ¶óµµ ºÒÀÌÀÍÀÌ ¹ß»ýÇÏ´Â ±â´ÉÀº ÀÏ´ÜÀº ȸÇÇÇØ ³õ°í °³¹ßÀÚ°¡ ÇÊ¿äÇÒ ¶§¸¸ ¾µ ¼ö ÀÖµµ·Ï Çϴµ¥ ºñÇØ ÀÚ¹Ù´Â Á¶±ÝÀÌ¶óµµ ÇÊ¿äÇÑ ±â´ÉÀº ¼º´ÉÀÇ °¨¼ö¸¦ Èñ»ýÇÏ°í¶óµµ ¹«Á¶°Ç Á¦°øÇÑ´Ù.

final

¾Õ¿¡¼­ final Å°¿öµå´Â »ó¼ö Çʵ带 ¼±¾ðÇÒ ¶§ »ç¿ëÇÑ´Ù°í Çß´Ù. ÇÊµå ¼±¾ð¹®¾Õ¿¡ finalÀ» ºÙÀÌ¸é ¸¶Áö¸·À¸·Î Çѹø¸¸ ÃʱâÈ­ÇÏ°í ¾ÕÀ¸·Î ´õ ÀÌ»ó °ªÀ» ¹Ù²ÙÁö ¾Ê°Ú´Ù´Â ¶æÀ̹ǷΠÀǹ̻óÀ¸·Î finalÀÌ ÀûÇÕÇÏ´Ù. finalÀº ÇÊµå »Ó¸¸ ¾Æ´Ï¶ó Ŭ·¡½º³ª ¸Þ¼­µå¿¡µµ ºÙÀÏ ¼ö Àִµ¥ ´ë»ó¿¡ µû¶ó Àǹ̰¡ Á¶±Ý¾¿ ´Þ¶óÁø´Ù.

finalÀ» Ŭ·¡½º¾Õ¿¡ ºÙÀÌ¸é ´õ ÀÌ»ó ÆÄ»ýÀ» ÇÒ ¼ö ¾ø´Â Ŭ·¡½º¶ó´Â ¶æÀÌ´Ù. Áï »ó¼Ó¿¡ ÀÇÇØ ¸¸µé¾îÁø ¸¶Áö¸· Ŭ·¡½º¶ó´Â ¶æÀε¥ Ŭ·¡½º °èÃþÀÇ Á¦ÀÏ ³¡ ºÎºÐ¿¡ Á¸ÀçÇÑ´Ù. ³Ê¹« ¿Ïº®Çϰųª ³Ê¹« °£´ÜÇÑ Å¬·¡½º¿¡ ´ëÇØ finalÀ» ºÙ¿© »ó¼ÓÀ» ±ÝÁöÇÑ´Ù. ¶Ç´Â »ó¾÷ÀûÀÎ ÀÌÀ¯·Î finalÀ» ºÙÀ̱⵵ Çϴµ¥ Á¦ 3 ÀÚ°¡ Ŭ·¡½º¸¦ ¸¶À½´ë·Î È®ÀåÇؼ­ ¾µ ¼ö ÀÖµµ·Ï ÇØ ¹ö¸®¸é ¾÷±×·¹À̵åµÈ ¹öÀüÀ» ÆȾƸÔÀ» ¼ö ¾ø±â ¶§¹®ÀÌ´Ù.

finalÀ» ¸Þ¼­µå ¾Õ¿¡ ºÙÀÌ¸é ´õ ÀÌ»ó ÀçÁ¤ÀÇÇÒ ¼ö ¾ø´Â ¸Þ¼­µå¶ó´Â ¶æÀÌ´Ù. ¸Þ¼­µåÀÇ µ¿ÀÛÀÌ ±²ÀåÈ÷ º¹ÀâÇؼ­ ÇԺηΠÀçÁ¤ÀÇÇÒ ¼ö ¾øµµ·Ï ÇÏ°í ½ÍÀ» ¶§ ÀÌ ÁöÁ¤ÀÚ¸¦ ºÙÀδÙ. ½Ç·Â¾ø´Â ¶î¶îÇÑ °³¹ßÀÚ°¡ ºÎÁÖÀÇÇÏ°Ô ÀçÁ¤ÀǸ¦ Çϵµ·Ï ³» ¹ö·Á µÎ¸é ¿øÄ¡¾Ê´Â ºÎÀÛ¿ëÀÌ ³ªÅ¸³¯ ¼öµµ ÀÖÀ¸¹Ç·Î ¾Æ¿¹ ÀçÁ¤ÀǸ¦ ±ÝÁöÇØ ¹ö¸®´Â °ÍÀÌ´Ù. final ¸Þ¼­µå´Â ¼­ºê Ŭ·¡½º¿¡¼­ µ¿ÀÛÀ» ¼öÁ¤ÇÒ ¼ö ¾øÀ¸¸ç ¾ÖÃÊ¿¡ ½´ÆÛ Å¬·¡½º°¡ Á¤ÀÇÇØ ³õÀº ´ë·Î È£Ã⸸ ÇÒ ¼ö ÀÖ´Ù.