ÀÎÅÍÆäÀ̽º! ´Ù½Ã »ý°¢Çϱâ


¿À±¤½Å
E-mail:raytrust@nser.co.kr
(ÁÖ)¿£½á Ä¿¹Â´ÏƼ
Homepage:http://my.dreamwiz.com/raytrust/


½ÃÀÛÇϸç......

   Áö³­È£ÀÇ [µðÀÚÀÎÆÐÅÏ(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 {

             public void setInventoryNumber(String initInventoryNumber);

             public void setRetailPrice(double newRetailPrice);

             public double getRetailPrice();

}

¼Ò½º 1 : Inventory Interface

   Àç°í °ü¸® ÇÁ·Î±×·¥¿¡¼­ ÀÚÀü°Å°¡ Á¦´ë·Î °ü¸®µÇ¾îÁö±â À§Çؼ­, ÀÚÀü°Å Ŭ·¡½º´Â Inventory ÀÎÅÍÆäÀ̽º¸¦ ±¸Çö(implement)ÇÔÀ¸·Î½á ÀÌ·¯ÇÑ ±Ô¾à(protocol)¿¡ µ¿ÀÇÇؾ߸¸ ÇÑ´Ù. Ŭ·¡½º°¡ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â °æ¿ì, Ŭ·¡½º´Â ÀÎÅÍÆäÀ̽º¿¡ Á¤ÀÇµÈ ¸ðµç ¸Þ¼­µåµéÀ» ±¸ÇöÇÑ´Ù´Â °Í¿¡ µ¿ÀÇÇÏ´Â °ÍÀÌ´Ù. µû¶ó¼­, ÀÚÀü°Å Ŭ·¡½º´Â Àç°í¹øÈ£¸¦ ÇÒ´çÇÏ°í ¼Ò¸Å °¡°ÝÀ» °¡Á®¿À°í ¼³Á¤ÇÒ ¼ö ÀÖ´Â ¸Þ¼­µåµé°ú ±×¿ÜÀÇ ÇÊ¿äÇÑ ¸Þ¼­µåµé¿¡ ´ëÇÑ ±¸ÇöÀ» Á¦°øÇؾ߸¸ ÇÑ´Ù. À§¿¡¼­ Á¤ÀÇÇÑ Inventory ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÑ °£´ÜÇÑ Bicycle Ŭ·¡½º´Â ´ÙÀ½°ú °°´Ù.

class Bicycle implements Inventory {

             String inventoryNumber;
             double retailPrice;

             public void setInventoryNumber(String initInventoryNumber) {
                          this.inventoryNumber = initInventoryNumber;
             }

             public void setRetailPrice(double newRetailPrice) {
                          this.retailPrice = newRetailPrice;
             }

             public double getRetailPrice() {
                          return this.retailPrice;
             }

}

¼Ò½º 2 : Inventory Interface¸¦ ±¸ÇöÇÑ Bicycle Ŭ·¡½º

   ÀÌÁ¦ ¿ì¸®´Â Ŭ·¡½º ±¸Á¶µµÀÇ À§Ä¡¿¡ »ó°ü¾øÀÌ Å¬·¡½ºµé¿¡ ÀÇÇØ ±¸ÇöµÇ¾îÁú ¼ö ÀÖ´Â ±Ô¾à(protocol)À» Á¤ÀÇÇÏ´Â °æ¿ì¿¡ ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÎÅÍÆäÀ̽º´Â ´ÙÀ½°ú °°Àº °æ¿ì¿¡ À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù:

          ¼­·Î °ü°è°¡ ¾ø´Â Ŭ·¡½ºµé »çÀÌÀÇ À¯»çÇÑ Æ¯¼ºµéÀ» ºÎÀÚ¿¬½º·¯¿î
          Å¬·¡½º °ü°è¸¦ ¼³Á¤ÇÏÁö ¾Ê°í ¾ò¾î³»¾ß ÇÏ´Â °æ¿ì
          Çϳª ¶Ç´Â ±× ÀÌ»óÀÇ Å¬·¡½ºµé¿¡¼­ ¶È°°ÀÌ ±¸ÇöµÇ¾îÁú °Í °°Àº ¸Þ¼­µå¸¦
          ¼±¾ðÇØ¾ß ÇÏ´Â °æ¿ì
          Ŭ·¡½º ÀÚü¸¦ µå·¯³»Áö ¾Ê°í °´Ã¼ÀÇ ÇÁ·Î±×·¡¹Ö ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇؾß
          ÇÏ´Â °æ¿ì

¸¶Ä¡¸ç......

   Java ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼­ÀÇ Interface¿¡ ´ëÇؼ­ ´Ù½Ã Çѹø »ý°¢ÇØ º¼ ¼ö ÀÖµµ·Ï ±ÛÀ» ¾´´Ù°í ½è´Âµ¥... °³¹ßÀÚµéÀÌ ´õ Çò°¥¸®Áö´Â ¾ÊÀ»Áö °ÆÁ¤ÀÌ ¸ÕÀú ¾Õ¼±´Ù. ¿ì¼± ¼³°è°¡ ¾ø´Â ÇÁ·ÎÁ§Æ®ÀÇ °æ¿ì ÀÌ ±ÛÀ» ÇÊ¿ä°¡ ¾øÀ»Áöµµ ¸ð¸¥´Ù. °³¹ß¸¸ Çϸ鼭 ÀÎÅÍÆäÀ̽º¸¦ Á¦´ë·Î »ç¿ëÇÏ´Â °æ¿ì¸¦ ÇÊÀÚ´Â °ÅÀÇ º¸Áö ¸øÇß´Ù. º¸Åë Á¦´ë·Î µÈ ¼³°è¸¦ ÇÏ´Â °æ¿ì¿¡¸¸ ÀÎÅÍÆäÀ̽º¸¦ Á¦´ë·Î »ç¿ëÇÏ´Â °Í °°´Ù. Design PatternÀ» °øºÎÇÏ´Â µ¶ÀÚ¶ó¸é ÀÎÅÍÆäÀ̽ºÀÇ Á߿伺À» »õ»ï ´À³¥ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¿ì¼± À̹øÈ£¿¡ Á¦´ë·Î µÈ ±¸Çö Äڵ尡 ¾ø¾î¼­ ´õ ¾î·Á¿ö ÇϽô µ¶ÀÚ°¡ ÀÖÀ» Áöµµ ¸ð¸£°Ú´Ù. ½Ã°£ÀÌ µÈ´Ù¸é ´ÙÀ½¿¡´Â ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ¿© »ç¿ëÇÏ´Â Á¦´ë·Î µÈ ¿¹Á¦¸¦ °¡Áö°í ´Ù½Ã ¸¸³ª°í ½Í´Ù. ÀÌ ±Û¿¡ ´ëÇÑ ¾î¶°ÇÑ ¸ÞÀϵµ ȯ¿µÇÑ´Ù. ÀÌ»óÇÑ Á¡À̳ª ±Ã±ÝÇÑ Á¡ÀÌ ÀÖÀ¸¸é ¸ÞÀÏÀ» º¸³»ÁÖ±æ ¹Ù¶õ´Ù. ÀÌ ±ÛÀ» Àаí Java °³¹ßÀÚµéÀÌ Interface¿¡ ´ëÇØ ´Ù½Ã Çѹø °õ°õÈ÷ »ý°¢ÇØ ÁØ´Ù¸é ´õ ¹Ù¶ö °ÍÀÌ ¾øÀ» °ÍÀÌ´Ù.

Âü°í ¹®Çå

[1] The Java Tutorial
      Trail: Learning the Java Language
      Lesson: Object-Oriented Programming Concepts
      http://java.sun.com/docs/books/tutorial/java/concepts/interface.html


 oonewsletter - 2000/11/25