Ŭ·¡½º´Â °´Ã¼¸¦ Âï¾î³»´Â ÇüƲÀÌ´Ù. Çѹø¸¸ Àß Á¤ÀÇÇØµÎ¸é ¾ó¸¶µçÁö ¸¹Àº °´Ã¼µéÀ» ¼Õ½±°Ô Âï¾î³¾ ¼ö ÀÖÀ¸¸ç ±×·¡¼ »ý»ê¼ºÀÌ ³ô´Ù°í ÇÑ´Ù. °´Ã¼ ÁöÇâÀÇ »ý»ê¼ºÀ» ´õ¿í ³ôÀ̴ Ư¡ÀÌ Å¬·¡½º·ÎºÎÅÍ Á» ´õ È®ÀåµÈ Ŭ·¡½º¸¦ ¸¸µé ¼ö ÀÖ´Â »ó¼ÓÀÌ´Ù. »ó¼Ó¿¡ ÀÇÇØ ºñ½Á ºñ½ÁÇÑ Äڵ尡 ÅëÇյǸç ÄÚµåÀÇ °ü¸®°¡ ½¬¿öÁø´Ù. ¶ÇÇÑ °´Ã¼ ÁöÇâÀÇ °¡Àå Å« À§·ÂÀÎ ´ÙÇü¼ºµµ »ó¼ÓÀ» ±â¹ÝÀ¸·Î ÇÑ´Ù.
»ó¼ÓÀº ÀÌ¹Ì ¸¸µé¾î ³õÀº Ŭ·¡½ºÀÇ ¸ðµç ¸â¹ö¸¦ ¹°·Á ¹Þ¾Æ »õ·Î¿î Ŭ·¡½º¸¦ Á¤ÀÇÇÏ´Â ±â¹ýÀÌ´Ù. »ó¼ÓÀ» ÇØ Áִ Ŭ·¡½º¸¦ ½´ÆÛ Å¬·¡½º¶ó°í ÇÏ¸ç »ó¼ÓÀ» ¹Þ¾Æ »õ·Î ¸¸µé¾îÁö´Â Ŭ·¡½º¸¦ ¼ºê Ŭ·¡½º¶ó°í ÇÑ´Ù. 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++ÀÌ ¿ìÀ§¸¦ Á¡ÇÏÁö¸¸ Çö´ëÀûÀÎ °í¼º´É Çϵå¿þ¾î ȯ°æ¿¡¼´Â ´ç¿¬È÷ ÀÚ¹ÙÀÇ ¼±ÅÃÀÌ Çö¸íÇÏ´Ù°í º¼ ¼ö ÀÖ´Ù.
ºÎ¸ð´Â ÀÚ½ÄÀ» °¡¸®Å³ ¼ö ÀÖÁö¸¸ ÀÚ½ÄÀº ºÎ¸ð¸¦ °¡¸®Å³ ¼ö ¾ø´Ù. ÀÌ°ÍÀº ´ç¿¬ÇÑ ¿øÄ¢ÀÌ´Ù. ±×·¯³ª ¶§·Î´Â ÀÚ½Ä Å¸ÀÔÀÇ º¯¼ö°¡ ºÎ¸ð ŸÀÔÀÇ °´Ã¼¸¦ ´ëÀÔ¹Þ¾Æ¾ß ÇÏ´Â °æ¿ìµµ ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.
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À» ºÙÀ̱⵵ Çϴµ¥ Á¦ 3 ÀÚ°¡ Ŭ·¡½º¸¦ ¸¶À½´ë·Î È®ÀåÇؼ ¾µ ¼ö ÀÖµµ·Ï ÇØ ¹ö¸®¸é ¾÷±×·¹À̵åµÈ ¹öÀüÀ» ÆȾƸÔÀ» ¼ö ¾ø±â ¶§¹®ÀÌ´Ù.
finalÀ» ¸Þ¼µå ¾Õ¿¡ ºÙÀÌ¸é ´õ ÀÌ»ó ÀçÁ¤ÀÇÇÒ ¼ö ¾ø´Â ¸Þ¼µå¶ó´Â ¶æÀÌ´Ù. ¸Þ¼µåÀÇ µ¿ÀÛÀÌ ±²ÀåÈ÷ º¹ÀâÇؼ ÇԺηΠÀçÁ¤ÀÇÇÒ ¼ö ¾øµµ·Ï ÇÏ°í ½ÍÀ» ¶§ ÀÌ ÁöÁ¤ÀÚ¸¦ ºÙÀδÙ. ½Ç·Â¾ø´Â ¶î¶îÇÑ °³¹ßÀÚ°¡ ºÎÁÖÀÇÇÏ°Ô ÀçÁ¤ÀǸ¦ Çϵµ·Ï ³» ¹ö·Á µÎ¸é ¿øÄ¡¾Ê´Â ºÎÀÛ¿ëÀÌ ³ªÅ¸³¯ ¼öµµ ÀÖÀ¸¹Ç·Î ¾Æ¿¹ ÀçÁ¤ÀǸ¦ ±ÝÁöÇØ ¹ö¸®´Â °ÍÀÌ´Ù. final ¸Þ¼µå´Â ¼ºê Ŭ·¡½º¿¡¼ µ¿ÀÛÀ» ¼öÁ¤ÇÒ ¼ö ¾øÀ¸¸ç ¾ÖÃÊ¿¡ ½´ÆÛ Å¬·¡½º°¡ Á¤ÀÇÇØ ³õÀº ´ë·Î È£Ã⸸ ÇÒ ¼ö ÀÖ´Ù.