|
½ÃÀÛÇϸç...... Áö³È£ÀÇ [µðÀÚÀÎÆÐÅÏ(8)-¾ÈÁ¤¼º°ú Åõ¸í¼º]¿¡¼µµ Interface¿¡ ´ëÇÑ ¾ê±â°¡ ¾ÆÁÖ Àá±ñ ¾ð±ÞµÇ¾ú´Ù. ¾Æ´Â »ç¶÷Àº ´Ù ¾Ë°ÚÁö¸¸, ¼³°è¿¡¼ÀÇ Interface¿¡ ´ëÇÑ Á߿伺Àº ¾Æ¹«¸® °Á¶Çصµ Áö³ªÄ¡Áö ¾ÊÀ» °ÍÀÌ´Ù. InterfaceÀÇ °³³äÀ» ÀâÁö ¸øÇÏ°í¼´Â Design PatternÀ» Àâ´Â ´Ù´Â °Íµµ ºÒ°¡´ÉÇÑ ÀÏÀÌ µÉ °ÍÀÌ´Ù. ±×·¯³ª, ÇöÀç ÁÖÀ§ÀÇ ÀÚ¹Ù °³¹ßÀÚµé Áß ´ëºÎºÐÀÌ InterfaceÀÇ Á߿伺À» °£°úÇÏ°í ÀÖ´Ù. ´ëºÎºÐÀÇ ÀÚ¹Ù Ãʺ¸ °³¹ßÀÚµéÀÌ Interface ÇÏ¸é ´ÙÁß »ó¼ÓÀ» À§ÇÑ °³³äÀ¸·Î¸¸ »ý°¢ÇÏ°íµé ÀÖÀ» °ÍÀÌ´Ù. ¶ÇÇÑ, ÀÚ¹Ù ÀÔ¹®¼¸¦ º¸´õ¶óµµ Interface¿¡ ´ëÇØ ±âº»ÀûÀÎ »ó½Ä¸¸ ¼³¸íÇÏ°í ±×³É ³Ñ¾î°¡´Â °æ¿ì°¡ ¸¹´Ù. ÀÌÁ¦´Â Interface¸¦ ´õ ÀÚ¼¼È÷ ¿³ º¸¾Æ¾ß ÇÒ(?) ½Ã°£ÀÌ ¿Â °Í °°´Ù. ÇÊÀÚµµ ½Ç·ÂÀÌ ¾ÆÁÖ ¶Ù¾î³ªÁö´Â ¾ÊÁö¸¸, Interface¸¦ ¿ÀÇØÇÏ°í ÀÖ´Â °³¹ßÀÚ¸¦ À§Çؼ Interface¸¦ ¼Ò°³ÇÏ·Á ÇÑ´Ù. Âü°í·Î, ÀÌ ¹®¼´Â Java TutorialÁß¿¡¼ Trail: Learning the Java Language, Lesson: Object-Oriented Programming ConceptsÀ» ±âº»À¸·Î ÇÏ°í ÀÖ´Ù´Â °ÍÀ» ¹àÇôµÐ´Ù. ³²ÀÇ Áö½ÄÀ» ¸¶Ä¡ ³» °Íó·³ »ç¿ëÇÏ´Â °ÍÀº ÈÉÄ¡´Â °ÍÀ̳ª ¸¶Ä£°¡ÁöÀ̱⠶§¹®ÀÌ´Ù. ÇÊÀÚµµ ÇÊÀÚÀÇ »ý°¢À¸·Î ±ÛÀ» ¾²°í ½Í¾úÀ¸³ª, ÀÌ ±Ûº¸´Ù ´õ ÁÁÀº ±ÛÀÌ ³ª¿ÀÁö ¾ÊÀ» °Í °°¾Æ¼ ÀÌ ±ÛÀ» ÀοëÇϱâ·Î Çß´Ù. ÇÏ·ç »¡¸® ¿ì¸®³ª¶ó¿¡¼µµ ÀÌÁ¤µµÀÇ ±ÛÀ» ¾µ ¼ö ÀÖ´Â µðÀÚÀ̳ʰ¡ ³ª¿ÔÀ¸¸é ÇÏ´Â ¹Ù·¥ÀÌ´Ù. ºñ·Ï ³²ÀÇ ±ÛÀ» ÀοëÇßÁö¸¸, ±×³É ¹ø¿ªÀº ÇÏÁö ¾ÊÀ¸·Á°í ³ë·ÂÇß´Ù. Àаí ÀÌÇØÇϱ⠽±°Ô ¾²·Á°í ³ë·ÂÇߴµ¥...... ¼·ÐÀÌ ³Ê¹« ±æ¾ú³ª º¸´Ù. ÀÌÁ¦ºÎÅÍ Interface¿¡ ¼¼°è·Î µé¾î°¡ º¸ÀÚ. µé¾î°¡±â Àü¿¡, ÀÌ ±ÛÀ» Àд µ¶ÀÚ°¡ °´Ã¼ ÁöÇâÀÇ °³³äÀÌ ¾ø´Ù¸é ¸ÕÀú °´Ã¼ ÁöÇâ °³³äºÎÅÍ °øºÎÇϱ⸦ ¹Ù¶õ´Ù. ±×·³, Áö±Ý±îÁö ¾Ë°í ÀÖ´ø InterfaceÀÇ °³³äÀ» ¸ðµÎ Áö¿ì°í »õ·Ó°Ô ½ÃÀÛÇØ º¸µµ·Ï ÇÏÀÚ. ±×·¡¾ß ÀÌÇØ°¡ ´õ ºü¸¦ °ÍÀÌ´Ù. GO! GO! ÀÎÅÍÆäÀ̽º(Interface)¶õ ¹«¾ùÀΰ¡? Java ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼ÀÇ ÀÎÅÍÆäÀ̽º¿¡ ´ëÇØ ¾ê±âÇØ º¸±â Àü¿¡ ÀÎÅÍÆäÀ̽º¶õ ´Ü¾î¿¡ ´ëÇØ ¸ÕÀú »ìÆ캸ÀÚ. ´Ü¾îÀûÀÎ Àǹ̷Πº¸¸é, ÀÎÅÍÆäÀ̽º¶õ ¼·Î °ü°è°¡ ¾ø´Â ¹°Ã¼µéÀÌ »óÈ£ ÀÛ¿ëÀ» Çϱâ À§Çؼ »ç¿ëÇÏ´Â ÀåÄ¡³ª ½Ã½ºÅÛÀÌ´Ù (interface is a device or a system that unrelated entities use to interact.). ÀÌ·¯ÇÑ Á¤ÀÇ¿¡ µû¸¥´Ù¸é °ú¿¬ ¾î¶² °ÍµéÀ» ÀÎÅÍÆäÀ̽º¶ó°í »ý°¢ÇÒ ¼ö ÀÖÀ»±î? Àß ¶°¿À¸£Áö ¾Ê°ÚÁö¸¸, ¿ì¸®´Â ÀÌ¹Ì ÀÏ»ó »ýÈ°¿¡¼ ¸¹Àº ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ°í ÀÖ´Ù. ¿¹¸¦ ¸î °¡Áö µé¾îº¸µµ·Ï ÇÏÀÚ. ¿ì¼± Áý¿¡¼ ÅÚ·¹ºñÁ¯À» º¼ ¶§ ¸¹ÀÌ »ç¿ëÇÏ´Â ¸®¸ðÆ® ÄÁÆ®·Ñ·¯¸¦ »ý°¢ÇØ º¸ÀÚ. ÀÌ ¸®¸ðÆ® ÄÁÆ®·Ñ·¯´Â ÅÚ·¹ºñÁ¯À» º¸´Â ³ª¿Í ÅÚ·¹ºñÁ¯ »çÀÌÀÇ ÀÎÅÍÆäÀ̽ºÀÌ´Ù. ±×¸®°í, ¿ì¸®°¡ ´ëÈÇÒ ¶§ »ç¿ëÇÏ´Â Çѱ¹¾î ¶ÇÇÑ ´ëÈÇÏ´Â µÎ »ç¶÷ »çÀÌÀÇ ÀÎÅÍÆäÀ̽ºÀÌ´Ù. ±º´ë¿¡¼ °¿äµÇ´Â ¿òÁ÷ÀÓ¿¡ ´ëÇÑ ±Ô¾àµµ ¼·Î ´Ù¸¥ °è±ÞÀÇ ±ºÀÎµé »çÀÌÀÇ ÀÎÅÍÆäÀ̽ºÀÌ´Ù. ±×·¸´Ù¸é, ÀÌÁ¦ ´Ù½Ã Java ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î µ¹¾Æ¿Í¼ »ý°¢ÇØ º¸ÀÚ. Java ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼, ÀÎÅÍÆäÀ̽º´Â ¼·Î °ü°è°¡ ¾ø´Â °´Ã¼µéÀÌ ¼·Î »óÈ£ ÀÛ¿ëÀ» Çϱâ À§Çؼ »ç¿ëÇÏ´Â ¹æ¹ý(device)ÀÌ´Ù. ÀÎÅÍÆäÀ̽º´Â ¾Æ¸¶µµ ÇÕÀÇµÈ ÇൿÀ» ÀǹÌÇÏ´Â ÇÁ·ÎÅäÄÝ°ú °¡Àå À¯»çÇÒ °ÍÀÌ´Ù. »ç½Ç, ´Ù¸¥ °´Ã¼ ÁöÇâ ¾ð¾îµéµµ ÀÎÅÍÆäÀ̽ºÀÇ ±â´ÉÀ» °¡Áö°í ÀÖ´Ù. ±×·¯³ª, ¸î¸î ¾ð¾î¿¡¼´Â ÀÎÅÍÆäÀ̽º¸¦ ÇÁ·ÎÅäÄÝÀ̶ó°í ¸í¸íÇϱ⵵ ÇÑ´Ù. ÀÌ·¯ÇÑ °³³ä¸¸À¸·Î ÀÌÇØ°¡ °¡Áö´Â ¾ÊÀ» °ÍÀÌ´Ù. ±×·¡¼, ÀÚÀü°Å(bicycle)¶ó´Â Ŭ·¡½º¸¦ °¡Áö°í ¿¹¸¦ ÇÑ ¹ø µé¾îº¸µµ·Ï ÇÏÀÚ. ÀÚÀü°Å¶ó´Â Ŭ·¡½º¿Í ÀÚÀü°ÅÀÇ Å¬·¡½º ±¸Á¶µµ(hierarchy)´Â ÀÚÀü°Å°¡ ÇÒ ¼ö ÀÖ´Â °Í°ú ÇÒ ¼ö ¾ø´Â °ÍÀ» Á¤ÀÇÇÑ´Ù. ±×·¯³ª ÀÚÀü°ÅµéÀº ¼¼»ó¿¡ Á¸ÀçÇÏ´Â ´Ù¸¥ °Íµé°ú »óÈ£ ÀÛ¿ëÀ» ÇÑ´Ù. ¿¹¸¦ µé¾î, »óÁ¡¿¡¼ÀÇ ÀÚÀü°Å´Â Àç°í °ü¸® ÇÁ·Î±×·¥¿¡ ÀÇÇؼ °ü¸®µÇ¾îÁú ¼ö ÀÖ´Ù. Àç°í °ü¸® ÇÁ·Î±×·¥Àº °¢°¢ÀÇ Ç°¸ñÀÌ °¡°Ý°ú Àç°í¹øÈ£ °°Àº È®½ÇÇÑ Á¤º¸¸¦ Á¦°øÇÏ´Â µ¿¾È¿¡´Â Àç°í °ü¸® ÇÁ·Î±×·¥ÀÌ °ü¸®ÇÏ´Â Ç°¸ñÀÇ Å¬·¡½º°¡ ¹«¾ùÀÎÁö ÀüÇô ½Å°æ¾²Áö ¾Ê´Â´Ù. Àç°í °ü¸® ÇÁ·Î±×·¥Àº ¼·Î °ü°è°¡ ¾ø´Â Ç°¸ñµéÀÇ Å¬·¡½º °ü°è(relationship)¸¦ °¿äÇϱ⠺¸´Ù´Â, ´ë½Å Ç°¸ñ¿¡ ´ëÇÑ Á¤º¸¸¦ ¾Ë ¼ö ÀÖµµ·Ï ÇÏ´Â ±Ô¾àÀ» ¸¸µç´Ù. ÀÌ·¯ÇÑ ±Ô¾à(protocol)Àº ÀÎÅÍÆäÀ̽º¿¡¼ »ó¼ö¿Í ¸Þ¼µåµé Á¤ÀÇÇÏ´Â ¹æ¹ýÀ¸·Î ¸¸µé¾îÁú ¼ö ÀÖ´Ù. Inventory(Àç°í) ÀÎÅÍÆäÀ̽º´Â Àç°í¹øÈ£¸¦ ÇÒ´çÇÏ°í ¼Ò¸Å °¡°ÝÀ» °¡Á®¿À°í ¼³Á¤ÇÒ ¼ö ÀÖ´Â ¸Þ¼µåµé°ú ±×¿ÜÀÇ ÇÊ¿äÇÑ ¸Þ¼µåµéÀ», ±¸Çö(implement)ÀÌ ¾Æ´Ï¶ó, Á¤ÀÇ(definition)ÇØ¾ß ÇÑ´Ù. °£´ÜÇÑ Inventory ÀÎÅÍÆäÀ̽º´Â ´ÙÀ½°ú °°´Ù.
interface Inventory { ¼Ò½º 1 : Inventory Interface Àç°í °ü¸® ÇÁ·Î±×·¥¿¡¼ ÀÚÀü°Å°¡ Á¦´ë·Î °ü¸®µÇ¾îÁö±â À§Çؼ, ÀÚÀü°Å Ŭ·¡½º´Â Inventory ÀÎÅÍÆäÀ̽º¸¦ ±¸Çö(implement)ÇÔÀ¸·Î½á ÀÌ·¯ÇÑ ±Ô¾à(protocol)¿¡ µ¿ÀÇÇؾ߸¸ ÇÑ´Ù. Ŭ·¡½º°¡ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â °æ¿ì, Ŭ·¡½º´Â ÀÎÅÍÆäÀ̽º¿¡ Á¤ÀÇµÈ ¸ðµç ¸Þ¼µåµéÀ» ±¸ÇöÇÑ´Ù´Â °Í¿¡ µ¿ÀÇÇÏ´Â °ÍÀÌ´Ù. µû¶ó¼, ÀÚÀü°Å Ŭ·¡½º´Â Àç°í¹øÈ£¸¦ ÇÒ´çÇÏ°í ¼Ò¸Å °¡°ÝÀ» °¡Á®¿À°í ¼³Á¤ÇÒ ¼ö ÀÖ´Â ¸Þ¼µåµé°ú ±×¿ÜÀÇ ÇÊ¿äÇÑ ¸Þ¼µåµé¿¡ ´ëÇÑ ±¸ÇöÀ» Á¦°øÇؾ߸¸ ÇÑ´Ù. À§¿¡¼ Á¤ÀÇÇÑ Inventory ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ °£´ÜÇÑ Bicycle Ŭ·¡½º´Â ´ÙÀ½°ú °°´Ù.
class Bicycle implements Inventory { ¼Ò½º 2 : Inventory Interface¸¦ ±¸ÇöÇÑ Bicycle Ŭ·¡½º
ÀÌÁ¦ ¿ì¸®´Â Ŭ·¡½º ±¸Á¶µµÀÇ À§Ä¡¿¡ »ó°ü¾øÀÌ Å¬·¡½ºµé¿¡ ÀÇÇØ ±¸ÇöµÇ¾îÁú ¼ö ÀÖ´Â ±Ô¾à(protocol)À» Á¤ÀÇÇÏ´Â °æ¿ì¿¡ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÀÎÅÍÆäÀ̽º´Â ´ÙÀ½°ú °°Àº °æ¿ì¿¡ À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù: ¸¶Ä¡¸ç...... Java ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼ÀÇ Interface¿¡ ´ëÇؼ ´Ù½Ã Çѹø »ý°¢ÇØ º¼ ¼ö ÀÖµµ·Ï ±ÛÀ» ¾´´Ù°í ½è´Âµ¥... °³¹ßÀÚµéÀÌ ´õ Çò°¥¸®Áö´Â ¾ÊÀ»Áö °ÆÁ¤ÀÌ ¸ÕÀú ¾Õ¼±´Ù. ¿ì¼± ¼³°è°¡ ¾ø´Â ÇÁ·ÎÁ§Æ®ÀÇ °æ¿ì ÀÌ ±ÛÀ» ÇÊ¿ä°¡ ¾øÀ»Áöµµ ¸ð¸¥´Ù. °³¹ß¸¸ ÇÏ¸é¼ ÀÎÅÍÆäÀ̽º¸¦ Á¦´ë·Î »ç¿ëÇÏ´Â °æ¿ì¸¦ ÇÊÀÚ´Â °ÅÀÇ º¸Áö ¸øÇß´Ù. º¸Åë Á¦´ë·Î µÈ ¼³°è¸¦ ÇÏ´Â °æ¿ì¿¡¸¸ ÀÎÅÍÆäÀ̽º¸¦ Á¦´ë·Î »ç¿ëÇÏ´Â °Í °°´Ù. Design PatternÀ» °øºÎÇÏ´Â µ¶ÀÚ¶ó¸é ÀÎÅÍÆäÀ̽ºÀÇ Á߿伺À» »õ»ï ´À³¥ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¿ì¼± À̹øÈ£¿¡ Á¦´ë·Î µÈ ±¸Çö Äڵ尡 ¾ø¾î¼ ´õ ¾î·Á¿ö ÇϽô µ¶ÀÚ°¡ ÀÖÀ» Áöµµ ¸ð¸£°Ú´Ù. ½Ã°£ÀÌ µÈ´Ù¸é ´ÙÀ½¿¡´Â ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ¿© »ç¿ëÇÏ´Â Á¦´ë·Î µÈ ¿¹Á¦¸¦ °¡Áö°í ´Ù½Ã ¸¸³ª°í ½Í´Ù. ÀÌ ±Û¿¡ ´ëÇÑ ¾î¶°ÇÑ ¸ÞÀϵµ ȯ¿µÇÑ´Ù. ÀÌ»óÇÑ Á¡À̳ª ±Ã±ÝÇÑ Á¡ÀÌ ÀÖÀ¸¸é ¸ÞÀÏÀ» º¸³»ÁÖ±æ ¹Ù¶õ´Ù. ÀÌ ±ÛÀ» Àаí Java °³¹ßÀÚµéÀÌ Interface¿¡ ´ëÇØ ´Ù½Ã Çѹø °õ°õÈ÷ »ý°¢ÇØ ÁØ´Ù¸é ´õ ¹Ù¶ö °ÍÀÌ ¾øÀ» °ÍÀÌ´Ù. Âü°í ¹®Çå
[1] The Java Tutorial |
oonewsletter - 2000/11/25 |