¼Ö¶ó¸®½º »ó¿¡¼­ "ÀÚ¹Ù GNOME" ¹ÙÀεùÀ» ÀÌ¿ëÇØ¼­ °³¹ßÇϱâ
John Rice, 2007³â 2¿ù  
Contents
 
¼Ò°³
¼±ÅÃ
ÀÚ¹Ù GNOME ¹ÙÀεùÀ̶õ?
¾î¶»°Ô ¾òÀ» ¼ö ÀÖ½À´Ï±î?
ÀÚ¹Ù GNOME "Hello World" »ý¼ºÇϱâ
À¯Àú¿¡ ¹ÝÀÀÇϱâ
Glade ¿Í È¥ÇÕÇØ¼­ »ç¿ëÇϱâ
Glade UI ¿Í ¾îÇø®ÄÉÀ̼ÇÀ» ¿¬°á
½Ã±×³Î Çڵ鷯 -- GladeÀÇ ¾×¼Ç Çڵ鷯
À§Á¬¿¡ Á¢±ÙÇϱâ
Á» ´õ º¹ÀâÇÑ ¿¹Á¦ - Calculator ¿¹Á¦
´õ ±íÀÌ µé¾î°¡±â
°á·Ð
ÀúÀÚ¿¡ °üÇÏ¿©
Ãßõ µµ¼­
°ü·Ã ÀÚ·á
¿¹Á¦ ÄÚµå ¸ñ·Ï
 
¼Ò°³

2005³â 8¿ù¿¡ Ãâ½ÃµÈ ÀÌÈÄ ¼Ö¶ó¸®½º´Â Ä¿´Ù¶õ ¹ÝÇâÀ» ºÒ·¯ÀÏÀ¸ÄÑ ¿Ô½À´Ï´Ù. 600¸¸°Ç ÀÌ»óÀÇ µî·ÏµÈ ´Ù¿î·Îµå °Ç¼ö¸¦ ±â·ÏÇØ ¿Â ¼Ö¶ó¸®½º´Â µ¥½ºÅ©Å¾ °³¹ßÀÚµéÀÌ ±×µéÀÇ ¾îÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÏ°í ¹èÄ¡Çϴ Ÿ°ÙÁß¿¡ Çϳª·Î °í·Á µÇ°í ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ¼º°øÀº ¼Ö¶ó¸®½º¿¡ Æ÷ÇÔµÈ ±â´ÉÀÎ Á¸, Dtrace, ÀÚ°¡¿¹Ãø ±â´É, ¹× ZFS °°Àº ÃÖ½ÅÀÇ ±â¼úÀûÀÎ Çõ½Å¿Ü¿¡ ¼Ö¶ó¸®½ºÀÇ ¿ÀǼҼÒÈ­°¡ ¹Ø¹ÙÅÁÀÌ µÇ°í ÀÖ½À´Ï´Ù.

°³¹ßÀÚµéÀº ¾î¶°ÇÑ µ¥½ºÅ©Å¾¿¡ ¾îÇø®ÄÉÀ̼ÇÀ» ¹èÄ¡ ÇÒ±î¿ä? ¾Æ¸¶ ¼Ö¶ó¸®½º10 ¿¡¼­ ¿À·¡µ¿¾È »ç¿ëµÇ´ø CDE¸¦ ´ëüÇÑ »õ·Î¿î µ¥½ºÅ©Å¾ÀÎ GNOME¿¡ ¹èÄ¡ÇÒ °ÍÀÔ´Ï´Ù. GNOME Àº Çö´ëÀûÀÎ µ¥½ºÅ©Å¾À¸·Î½á °³¹ßÀÚµéÀÇ ±×µéÀÇ best-of-breed µ¥½ºÅ©Å¾ ¾îÇø®ÄÉÀ̼ÇÀ» º¸¿©ÁÙ ¼ö ÀÖµµ·Ï µµ¿ÍÁÙ °ÍÀÔ´Ï´Ù.

GNOME Ä¿¹Â´ÏƼ´Â µ¥½ºÅ©Å¾ °³¹ßÀÚµéÀ» ²ø¾îµéÀ̱â À§ÇØ C ¿ÜÀÇ ´Ù¸¥ °³¹ß ¼ö´ÜÀ» Á¦°øÇÒ ¼ö ÀÖ¾î¾ß ÇÔ¿¡ ´ëÇØ ÀüüÀûÀ¸·Î °ø°¨Çϰí ÀÖ½À´Ï´Ù. C´Â »ó´ëÀûÀ¸·Î Àú¼öÁØÀÌ°í ³ÊÃ÷-¿Í-º¼Æ® ÇüÅÂÀÇ ¾ð¾î·Î½á Çö´ëÀÇ °´Ã¼ÁöÇâ ¾ð¾î°¡ Á¦°øÇϰí ÀÖ´Â ÀÎÅÍÆäÀ̽º ±â¹ÝÀÇ ÇÁ·Î±×·¡¹Ö, ÀÚµ¿È­µÈ ¸Þ¸ð¸® °ü¸®, ¿¹¿Ü ó¸® °°Àº »ý»ê¼º°ú °ü·ÃµÈ ±â´ÉµéÀ» Æ÷ÇÔÇϰí ÀÖÁö ¾Ê½À´Ï´Ù. ¿©·¯ºÐÀÌ »ìÆìº¸°ÔµÉ ÇÁ·Î±×·¡¹Ö ¾ð¾î´Â Çö´ë¿¡¼­ »ç¿ëµÇ°í ÀÖ´Â ¾ð¾îÁß °¡Àå ¼º°øÀûÀÎ °´Ã¼ÁöÇâ ¾ð¾îÀÎ ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾î·Î GPL ¶óÀ̼¾½º ÇÏ¿¡ ¿ÀÇÁ¼Ò½ºÈ­µÆ°í Àα⵵°¡ °è¼ÓÇØ¼­ »ó½ÂÇϰí ÀÖ½À´Ï´Ù. ¶ÇÇÑ ¾Õ¿¡¼­ ¾ð±ÞÇÑ ¾ð¾îÀûÀÎ Ãø¸é ¿Ü¿¡µµ ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾î´Â, ƯÈ÷ ÀÚ¹Ù °³¹ß ŰƮ(JDK)´Â ¹æ´ëÇÑ ¾çÀÇ °ß°íÇÑ ÀÚ¹Ù Ç÷§Æû API¸¦ Á¦°øÇÔÀ¸·Î½á °³¹ßÀÚµéÀÌ Çö´ë ¾îÇø®ÄÉÀ̼ǵéÀÌ ´Ù·ç¾î¾ß ÇÒ ´Ù¾çÇÑ µ¥ÀÌŸ ½ºÆ®¸², XML µ¥ÀÌŸ ¼Ò½º ÆÄ½Ì, ³×Æ®¿öÅ© ÀÛ¾÷ °°Àº UI¿Í °ü·Ã¾ø´Â ÀÛ¾÷µéÀÇ °³¹ßµéµµ ¸Å¿ì ½±°Ô ÇÒ ¼ö ÀÖµµ·Ï µµ¿Í ÁÝ´Ï´Ù.

95 ÆÛ¼¾Æ® ÀÌ»óÀÇ GNOME µ¥½ºÅ©Å¾ ÀÌ C·Î ¾²¿© Á³°í ¸¹Àº »ç¶÷µéÀÌ Çö´ëÀûÀÎ ½ºÅ¸ÀÏÀÇ ½ã ½ºÆ©µð¿À³ª NetBeans °°Àº IDEµéÀÇ C/C++ ¸ðµâÀ» ÀÌ¿ëÇØ °è¼ÓÇØ¼­ µ¥½ºÅ©Å¾ ¾îÇø®ÄÉÀ̼ÇÀ» C·Î °³¹ß ÇÒ °ÍÀÔ´Ï´Ù., ±×·¯³ª ÀÌ ±ÛÀº ÀÌ·¯ÇÑ Ã»ÁßµéÀ» À§ÇÑ ±ÛÀº ¾Æ´Õ´Ï´Ù. GNOME ÀÇ C ±â¹Ý °³¹ß¿¡ °üÇÑ ¹æ´ëÇÑ ¾çÀÇ ¿Â¶óÀÎ ¹®¼­°¡ gnome.org ¿¡¼­ Á¦°øµË´Ï´Ù.

ÀÌ ±ÛÀº ÀÚ¹Ù GNOME µ¥½ºÅ©Å¾ ¾îÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÏ·Á´Â ÀÚ¹Ù °³¹ßÀÚµéÀ» À§ÇÑ ¼±Åÿ¡ ´ëÇØ °£·«È÷ ¼Ò°³ÇÑ ÈÄ¿¡ ÀÚ¹Ù GNOME ¹ÙÀεùÀ̶ó°í Çϴ ƯÁ¤ ±â¼ú¿¡ ÃÐÁ¡À» ¸ÂÃâ °ÍÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ¹ÙÀεùÀº GNMOE Ç÷§Æû¿¡ Ä£¼÷ÇÑ °³¹ßÀڵ鿡°Ô ÃÐÁ¡À» ¸ÂÃß°í ÀÖÁö¸¸ C ±â¹ÝÀÇ ¾îÇø®ÄÉÀÌ¼Ç °³¹ßÀ» ¿ÏÀüÈ÷ ÀÚ¹Ù·Î ´ëüÇÏ·Á´Â °³¹ßÀڵ鿡°Ô´Â Àû´çÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ½À´Ï´Ù. ¹ÙÀεùÀº ¼Ö¶ó¸®½º ÀͽºÇÁ·¹½º °³¹ßÀÚ ¿¡µð¼Ç 2/07 ÀÇ ÀϺηνá Á¦°øµË´Ï´Ù.

¼±ÅÃ

ÀÚ¹Ù °³¹ßÀÚµéÀÌ ¼Ö¶ó¸®½ºÀÇ µ¥½ºÅ©Å¾ ¾îÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÏ·Á°í ÇÒ¶§¿¡´Â ±âÁ¸ÀÇ GNOME µ¥½ºÅ©Å¾°ú Àß ÅëÇÕ µÉ¼ö ÀÖ´Â ¾îÇø®ÄÉÀ̼ÇÀ» ¸¸µé¾î¾ß ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ¾îÇø®ÄÉÀ̼ÇÀº µ¥½ºÅ©Å¾ Å׸¶¿Í µ¿ÀÏÇÑ ³×ÀÌÆ¼ºê ·è¾Ø ÇÊÀ» °øÀ¯Çؼ­ ³×ÀÌÆ¼ºê ½Ã½ºÅÛ ´ÙÀ̾ó·Î±×, ³×ÀÌÆ¼ºê ¼³Á¤ ¿£Áø, ±×¸®°í ³×ÀÌÆ¼ºê GNMOE µ¥½ºÅ©Å¾ ¾îÇø®ÄÉÀ̼ǰú ºñ½ÁÇÏ°Ô µ¿ÀÏÇϵµ·Ï ÇØ¾ß ÇÕ´Ï´Ù.

°³¹ßÀڵ鿡°Ô´Â ¸¹Àº ¼±ÅõéÀÌ Á¸Àç ÇÕ´Ï´Ù. ÀÚ¹Ù Ç÷§ÆûÀÇ ½ºÅÄ´Ùµå ¿¡µð¼Ç(Java SE) ¿¡¼­ Á¦°øÇÏ´Â ½ºÀ® ¾îÇø®ÄÉÀÌ¼Ç ÇÁ·¹ÀÓ¿öÅ©, ȤÀº ÀÌŬ¸³½º¿¡¼­ Á¦°øÇÏ´Â SWT ÇÁ·¹ÀÓ¿öÅ©¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª ÀÌ¹Ì GNOME °³¹ßÀÚÀ̰í Glade/GTK ±â¹Ý °³¹ß¿¡ Ä£¼÷ÇÏ´Ù ÇÏ´õ¶óµµ ¶Ç´Ù¸¥ ÇÁ·¹ÀÓ¿öÅ©¸¦ ¹è¿ö¾ß ÇϹǷΠÀÌ·¯ÇÑ °ÍÀÌ ½Ã°£³¶ºñ°¡ µÉ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¹Ù GNOME ¹ÙÀεùÀº ¶Ç ´Ù¸¥ ¼±ÅÃÀ» Á¦°ø ÇÕ´Ï´Ù. À̰ÍÀº GNOME Ç÷§Æû ¶óÀ̺귯¸®¿Í freedesktop.org ÀÇ Cairo 2D µå·ÎÀ× ¿£ÁøÀ» À§ÇÑ ÀÚ¹Ù ¹ÙÀεù ¼ÂÀÔ´Ï´Ù. ¹ÙÀεùÀº GNOME °ú GTK+ ¾îÇø®ÄÉÀ̼ÇÀÌ ÀÚ¹Ù ¾ð¾î·Î ¾²¿©Áú ¼ö ÀÖµµ·Ï Çϰí ÀÚ¹Ù ³×ÀÌÆ¼ºê ÀÎÅÍÆäÀ̽º(JNI) ¸¦ ÀÌ¿ëÇØ¼­ ÀÚ¹Ù ¿Í ±â¹Ý GNOME Ç÷§Æû, ±×¸®°í Cairo C ¶óÀ̺귯¸®°¡ ¼­·Î ¿¬°á µÉ ¼ö ÀÖµµ·Ï Áö¿ø ÇÕ´Ï´Ù.

°­Á¶µÇ¾î¾ß ÇÒ Á¡Àº ÀÚ¹Ù GNOME ¹ÙÀεùÀ» ÀÌ¿ëÇÏ´Â °ÍÀº ½ºÀ®ÀÌ Á¦°øÇÏ´Â ÀÚ¹Ù UI ÇÁ·¹ÀÓ¿öÅ©³ª "write once run anywhere" °°Àº ÀÚ¹ÙÀÇ À¯¿¬ÇÔÀ» Æ÷±âÇØ¾ß ÇÏ´Â °ÍÀ» ÀÇ¹Ì ÇÕ´Ï´Ù. ¿Ö³ÄÇϸé ÀÌ·¯ÇÑ ±â¹Ý GNOME Ç÷§Æû °ú Cairo ¶óÀ̺귯¸®¿ÍÀÇ °­°áÇÕ ¶§¹®ÀÔ´Ï´Ù. ±×·¯³ª ¸¸¾à Ãæ½ÇÇÑ ±×¸®°í ³×À̺ñÆ®ÇÑ GNOME ÅëÇÕÀÌ Áß¿äÇÑ ¸ñÀûÀ̶ó¸é À̰ÍÀº ÀûÀýÇÑ ±³È¯Á¶°ÇÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¹Ù GNOME ¹ÙÀεùÀº °£´ÜÈ÷ µ¥½ºÅ©Å¾ ¾îÇø®ÄÉÀ̼ÇÀÇ °³¹ß¿¡ ¶Ç ´Ù¸¥ ¼±ÅñÇÀ» ÁÝ´Ï´Ù. µ¥½ºÅ©Å¾ ¾îÇø®ÄÉÀ̼ÇÀ» À§ÇÑ ÀûÀýÇÑ ÇÁ·¹ÀÓ¿öÅ©¸¦ ¼±ÅÃÇÒ¶§ Ç÷§Æû API/ÇÁ·¹ÀÓ¿öÅ©¿¡ ´ëÇÑ Áö½Ä, Å©·Î½º Ç÷§Æû °ú ³×ÀÌÆ¼ºê ÅëÇÕ ¿ä°Ç Áß¿¡ ¾î¶°ÇÑ Ãø¸é¿¡ ¿ìÀ§¸¦ µÑ°ÍÀÎÁö´Â °³¹ßÀڵ鿡°Ô ´Þ·Á ÀÖ½À´Ï´Ù.

ÀÌ ±ÛÀÇ ³ª¸ÓÁö ºÎºÐÀº ÀÚ¹Ù ±â¼ú-±â¹ÝÀÇ GNOME ¾îÇø®ÄÉÀ̼ÇÀ» °³¹ßÇϴµ¥ ÀÌ¿ëµÇ´Â ÀÚ¹Ù GNOME ¹ÙÀεù¿¡ ´ëÇØ ´Ù·ì´Ï´Ù. ¿¹Á¦µéÀº NetBeans IDE ·Î °³¹ß µÇ¾úÁö¸¸ ÀÌŬ¸³½º(Ãßõ µµ¼­ ÀÇ ÀÚ¹Ù GNOME µ¥¸ð ¸®½ºÆ® Âü°í) ȤÀº IntelliJ, jEdit, Emacs ȤÀº vi °°Àº IDE¸¦ ÀÌ¿ëÇØ¼­ °³¹ß ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

ÀÚ¹Ù GNOME ¹ÙÀεùÀ̶õ?

¾ÕºÎºÐ¿¡¼­ ¾ð±ÞÇßÁö¸¸ À̰ÍÀº GNOME °ú GTK+ ¾îÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÒ¶§ ÇÊ¿ä·ÎÇÑ ÄÚ¾î ¶óÀ̺귯¸®µéÀ» À§ÇÑ ¹ÙÀεù ¼ÂÀÔ´Ï´Ù. ¹ÙÀεùÀº ÀÚ¹Ù API¸¦ Á¦°øÇؼ­ Java SE Ç÷§Æû¿¡¼­ Áö¿øÇÏ´Â JNI ¸¦ ÅëÇØ¼­ ±â¹Ý Ç÷§ÆûÀÇ C API ¿¡ Á¢±ÙÀÌ °¡´ÉÇϵµ·Ï ÇÕ´Ï´Ù. ¹ÙÀεùÀº ¼Ö¶ó¸®½º ÆÐŰÁöÀÇ ¼ÂÀ¸·Î Á¦°ø µË´Ï´Ù. :

¾î¶»°Ô ¾òÀ» ¼ö ÀÖ½À´Ï±î?

ÁÁÀº ¼Ò½ÄÀ¸·Î´Â ÀÌ·¯ÇÑ ¹ÙÀεùÀÇ ¼Ö¶ó¸®½º ÀͽºÇÁ·¹½º, °³¹ßÀÚ ¿¡µð¼Ç 2/07 ºÎÅÍ Æ÷ÇԵǾú´Ù´Â °ÍÀÔˆ•.¤¿ ¼Ö¶ó¸®½º¿¡ ±âº»À¸·Î ¼³Ä¡µÈ ÀÚ¹Ù GNOME ÆÐŰÁö´Â SUNWgnome-base-libs-java, SUNWgnome-libs-java, SUNWgnome-config-java, ±×¸®°í SUNWgnome-terminal-java ÀÔ´Ï´Ù.

Java GNOME °ú NetBeans IDE

NetBeans ´Â °­·ÂÇÑ ÀÚ¹Ù±â¹ÝÀÇ IDE·Î netbeans.org ¿¡¼­ ´Ù¿î·Îµå °¡´ÉÇÕ´Ï´Ù. ÀÚ¹Ù GNOME °ú NetBeans IDE´Â ÀÚ¹Ù GNOME µ¥½ºÅ©Å¾ ¾îÇø®ÄÉÀ̼ÇÀ» »ç¿ëÇϴµ¥ °°ÀÌ ÀÌ¿ëµÉ ¼ö ÀÖ°í IDE¸¦ ÀÚ¹Ù GNOME API ¿Í °°ÀÌ ÀÌ¿ëÇØ¼­ ¾ÕºÎºÎ³ß¼­ ¾ð±ÞÇßµíÀÌ ¿©·¯°¡ÁöÀÇ »ùÇà ÇÁ·Î±×·¥µéÀ» ºôµåÇÒ ¼ö ÀÖ½À´Ï´Ù.

NetBeans IDEÀÇ ÀÚ¹Ù GNOME ¶óÀ̺귯¸®

¾îÇø®ÄÉÀ̼ǿ¡ ¹ÙÀεù¿¡ Á¢±ÙÇϱâ À§Çؼ­ ¿©·¯ºÐÀº ÀÚ¹Ù GNOME ¶óÀ̺귯¸®¸¦ »ý¼ºÇϰí Ãß°¡Çؼ­ NetBeans IDE°¡ ¸ðµç ÀÚ¹Ù GNOME API jars, ¼Ò½º jars, Javadoc À» Âü°íÇÒ ¼ö ÀÖµµ·Ï ÇØ¾ß ÇÕ´Ï´Ù. ÀÌ ÀÛ¾÷ÀÌ ¿Ï·áµÈ ÈÄ¿¡´Â ´Ü¼øÈ÷ ÇØ´ç ¶óÀ̺귯¸®¸¦ »õ·Î¿î ÇÁ·ÎÁ§Æ®¿¡ Ãß°¡½ÃÅ´À¸·Î½á ¾îÇø®ÄÉÀ̼ǿ¡°Ô ¹ÙÀεù¿¡ Á¢±Ù ÇÒ ¼ö ÀÖ´Â ±ÇÇÑÀ» ºÎ¿©ÇÒ ¼ö ÀÖ½À´Ï´Ù.

Netbeans IDE ¿¡¼­ ÀÚ¹Ù GNOME ¶óÀ̺귯¸® ¼³Á¤

´ÙÀ½ÀÇ ´Ü°è¸¦ ÅëÇØ¼­ JavaGnomeLib ¸¦ ¿©·¯ºÐµéÀÌ »ç¿ëÇÏ´Â ÇÁ·ÎÁ§Æ®¿¡ ¼öµ¿À¸·Î ¼³Á¤ÇÕ´Ï´Ù.

¼³Á¤À» °£´ÜÈ÷ Çϱâ À§ÇØ ¿ì¸®´Â ÀÚ¹Ù GNOME NetBeans Ç÷¯±×ÀÎÀ» ¸¸µé°í ÀÖ°í OpenSolaris.org ÀÚ¹Ù µ¥½ºÅ©Å¾ ½Ã½ºÅÛ ÇÁ·ÎÁ§Æ®ÆäÀÌÁöÀÇ ´Ù¿î·Îµå °ø°£¿¡¼­ °ð ´Ù¿î·Îµå°¡ °¡´ÉÇÒ ¿¹Á¤ÀÔ´Ï´Ù(Âü°íÀÚ·á ¼½¼Ç Âü°í). Ç÷¯±×ÀÎÀ» ¼³Ä¡ Çϸé JavaGnomeLib ¸¦ ÀÚµ¿À¸·Î »ý¼ºÇÒ °ÍÀÔ´Ï´Ù. Âü°í»çÇ×À¸·Î ¿©·¯ºÐÀÇ ¾îÇø®ÄÉÀ̼ÇÀÌ ¸ðµç ÀÚ¹Ù GNOME API jar µéÀ» ÇÊ¿ä·Î ÇÏÁö ¾ÊÀ» ¼öµµ ÀÖÁö¸¸ ÇϳªÀÇ JavaGnomeLibrary À» ¿©·¯ºÐÀÇ ÀÚ¹Ù GNOME ±â¹Ý ÇÁ·ÎÁ§Æ®¿¡ Ãß°¡ÇÏ´Â °ÍÀÌ ÀýÂ÷¸¦ ´Ü¼øÈ­ ÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÀÚ¹Ù GNOME "Hello World" »ý¼ºÇϱâ

NetBeans IDE ¸¦ ½ÇÇà½Ã۰í Ç¥ÁØ ÀÚ¹Ù ¾îÇø®ÄÉÀ̼ÇÀ» »ý¼ºÇÕ´Ï´Ù.

¾îÇø®ÄÉÀ̼ÇÀ» "hello" ¶ó°í ¸í¸íÇϰí JavaGnomeLib ¸¦ »ç¿ëÇϵµ·Ï ¼³Á¤ÇÕ´Ï´Ù.

ÀÌÁ¦ ÄÚµùÇÒ Áغñ°¡ µÇ¾ú½À´Ï´Ù. °£´ÜÇÑ "Hello World" ·Î ½ÃÀÛÇØ º¸°Ú½À´Ï´Ù.

 
Figure 1:
±×¸² 1: NetBeans IDE 5.5 »óÀÇ "Hello World" ÀÚ¹Ù ÄÚµå

ù¹øÂ°·Î GTK+ ¹ÙÀεù¿¡¼­ »ç¿ëÇÏ±æ ¿øÇÏ´Â ´Ù¾çÇÑ API µéÀ» ºÒ·¯ ¿É´Ï´Ù. (Âü°íÀÚ·á ¼½¼Ç¿¡ ¸ñ·ÏÈ­µÈ ÀÚ¹Ù GNOME ¸à ÆäÀÌÁö¸¦ Âü°íÇØ¼­ Àüü API import ¸ñ·ÏÀ» È®ÀÎ ÇϽñ⠹ٶ÷.) ¸¸¾à API ¼Ò½º¸¦ º¸°íÀÚ ÇÑ´Ù¸é import ±¸¹®¿¡¼­ ¿À¸¥ÂÊ Å¬¸¯À» ÇÑ ´ÙÀ½ Go To -> Source ¸¦ ¼±ÅÃÇÕ´Ï´Ù. jar ÆÄÀÏ¿¡¼­ ¸ðµç ¼Ò½º ÆÄÀϵéÀÌ ÇÁ·ÎÁ§Æ® ÆÐ³Î¿¡ ³ªÅ¸³²À¸·Î½á ¾î¶°ÇÑ API¸¦ »ç¿ëÇÒÁö È®½ÅÇÏÁö ¸øÇÒ¶§ ¸Å¿ì À¯¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. NetBeans IDE ´Â ¶ÇÇÑ ÄÚµå ÀÚµ¿¿Ï¼º ±â´ÉÀ» Áö¿øÇϹǷΠ´Ü¼øÈ÷ window. À» ÀÔ·ÂÇϸé À©µµ¿ì À§Á¬°ú °ü·ÃµÈ ¸ðµç »ç¿ë°¡´ÉÇÑ API¿Í API Javadoc À» º¸¿©ÁÙ °ÍÀÔ´Ï´Ù.

Hello ÀÇ »ý¼ºÀÚ¿¡¼­ ÃÖ»óÀ§ ·¹º§ À©µµ¿ì¸¦ »ý¼ºÇϰí "Hello!" ŸÀÌÆ²À» °¡Áø ¹öưÀ» Ãß°¡½Ã۰í, »çÀÌÁ ¼³Á¤ÇÑ ´ÙÀ½ º¸¿© ÁÝ´Ï´Ù. ¸ÞÀÎ ·çƾÀº GTK¸¦ ÃʱâÈ­ ½Ã۰í, Hello ÀÇ »ý¼ºÀÚ¸¦ È£Ãâ Çϰí, ±× ´ÙÀ½ GTKÀÇ ¸ÞÀÎ À̺¥Æ® ·çÇÁ¸¦ ½ÇÇà ½ÃÄѼ­ »ç¿ëÀÚÀÇ ÀÔ·ÂÀ» ó¸®Çؼ­ ¾îÇø®ÄÉÀ̼ǿ¡ ¹Ý¿µÇÕ´Ï´Ù.

°£°áÇÏ°Ô ¼³¸íÇϱâ À§ÇØ ÇÊÀÚ´Â LifeCycleListener Çڵ巯¸¦ À©µµ¿ì¿¡ Ãß°¡½ÃÄѼ­ À¯Àú°¡ ´Ý±â "X" ¸¦ ´­·¶À»¶§ ¾îÇø®ÄÉÀ̼ÇÀ» ±ú²ýÇÏ°Ô Á¾·á½ÃŰ´Â ¹ý¿¡ ´ëÇØ º¸¿© ÁÖÁö ¾Ê¾Ò½À´Ï´Ù. ¾î¶»°Ô ÇÏ´Â Áö »ìÆì º¸·Á¸é HelloWorld.java in »ùÇà ÄÚµå ¸ñ·ÏÀÇ java-gnome-code.tar ÆÄÀÏ ¿¡¼­ HelloWorld.java ¸¦ Âü°íÇϽñ⠹ٶø´Ï´Ù.

Èï¹Ì·ÓÁö´Â ¾Ê¾ÒÁö¸¸ ¿©·¯ºÐÀº ¹æ±Ý ¸· ÀÚ¹Ù ÇÁ·Î±×·¡¹ÖÀ¸·Î ¸¸µé¾îÁø ³×ÀÌÆ¼ºê GTK ¾îÇø®ÄÉÀ̼ÇÀ» »ý¼ºÇß½À´Ï´Ù. ÀÌ ¾îÇø®ÄÉÀ̼ÇÀº ¿©·¯ºÐÀÌ ¾î¶°ÇÑ µ¥½ºÅ©Å¾ Å׸¶¸¦ »ç¿ëÇÏ´õ¶óµµ ÀûÀýÇÏ°Ô ´ëÀÀÇÒ °ÍÀÔ´Ï´Ù. Á÷Á¢ Å×½ºÆ®¸¦ ÅëÇØ ÇÊÀÚ°¡ ¸»ÇÏ·Á´Â Àǵµ¸¦ ¾Ë¾Æº¸½Ã±â ¹Ù¶ø´Ï´Ù. GNOME¿¡¼­ Start Menu -> Preferences-> Theme ¸¦ ÅëÇØ¼­ Å׸¶¸¦ Nimbus ¿¡¼­ Blueprint ·Î ÀüȯÇÕ´Ï´Ù.

 
Figure 2a: Hello World Displayed in the Nimbus Theme in GNOME
±×¸² 2a: GNMOEÀÇ Nimbus Å׸¶¿¡¼­ÀÇ "Hello World"
 
Figure 2a: Hello World Displayed in the Nimbus Theme in GNOME
±×¸² 2b: GNOMEÀÇ Blueprint Å׸¶¿¡¼­ÀÇ "Hello World"
À¯Àú¿¡ ¹ÝÀÀÇϱâ

¹öưÀ» Ŭ¸¯ÇÏ¸é ¾Æ¹«·± ¹ÝÀÀµµ ³ªÅ¸³ªÁö ¾Ê½À´Ï´Ù. ±×·¯¹Ç·Î ´Ù¸¥ ÀÚ¹Ù ¾îÇø®ÄÉÀÌ¼Ç ÇÁ·¹ÀÓ¿öÅ©¿¡¼­ Çß´ø°Í°ú ¸¶Âù°¡Áö·Î ¾×¼Ç Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù. À̰ÍÀº org.gnu.gtk.event.ButtonListener ÀÔ´Ï´Ù.

´ÙÀ½ÀÇ ¹öư ¸®½º³Ê¸¦ Hello »ý¼ºÀÚ¿¡ btn À» »ý¼ºÇÑ ´ÙÀ½¿¡ Ãß°¡½Ãŵ´Ï´Ù.

btn.addListener(new ButtonListener() {
	public void buttonEvent(ButtonEvent e) {
	 	if (e.isOfType(ButtonEvent.Type.CLICK))
	            { System.out.println("Hello cruel world!"); } } });

¸¸¾à Äڵ忡 ¾î¶°ÇÑ ¹®Á¦°¡ ÀÖ´Ù¸é NetBeans IDE ´Â ¿©·¯ºÐÀÌ ÀÔ·ÂÇÑ ÄÚµåÀÇ ¿ÞÂÊ »çÀ̵忡 ÀÛÀº Àü±¸¸¦ º¸¿©ÁÖ°í À̸¦ ÅëÇØ¼­ ¹®Á¦Á¡¿¡ ´ëÇÑ Á¦¾ÈÀ» ÇØ ÁÝ´Ï´Ù. ÀÌ·¯ÇÑ ÄÚµå ÈùÆ®µéÀº ÄÁÆ®·Ñ-½ºÆäÀ̽º ۸¦ ÅëÇØ¼­µµ ³ªÅ¸³ª°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾ÕÀÇ Äڵ带 ÀÔ·ÂÇϸé Àü±¸ Ç¥½Ã°¡ ³ªÅ¸³¯ °ÍÀÔ´Ï´Ù. Àü±¸ ¸¦ Ŭ¸¯Çϸé ButtonListener ¿Í ButtonEvent ±×¸®°í ButtonEvent.Type À» import Çϵµ·Ï ±ÇÇÒ °ÍÀÔ´Ï´Ù.

 
Figure 3: Code Hints in the NetBeans IDE
±×¸² 3: NetBeans IDE ÀÇ ÄÚµå ÈùÆ®

¾îÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇÑ ´ÙÀ½ Hello World ¹öưÀ» Ŭ¸¯Çϸé Ç¥ÁØ Ãâ·Â¿¡ "Hello cruel world!" ¸Þ¼¼Áö¸¦ »ý¼ºÇÒ °ÍÀÔ´Ï´Ù.

 
Figure 4:
±×¸² 4: "Hello World"°¡ ¹öư Ŭ¸¯¿¡ ÀÀ´äÇÏ´Â ¸ð½À
Glade ¿Í È¥ÇÕÇØ¼­ »ç¿ëÇϱâ

¿©·¯ºÐÀº ÀÌÀü¿¡ Çß´ø ´ë·Î UI ÀÛ¾÷À» °è¼ÓÇØ¼­ ÇØ³ª°¥ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª º¹ÀâÇÑ ½Ç¼¼°èÀÇ µ¥½ºÅ©Å¾ ¾îÇø®ÄÉÀ̼ÇÀ» ´Ù·ê¶§ ÀÌ·± ¹æ½ÄÀº ¸Å¿ì ÁøÀú¸® ³ª´Â ÀÛ¾÷ÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù. UI ¿Í Äڵ带 ºÐ¸® ÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â°Ô ´õ ³ºÁö ¾ÊÀ»±î¿ä? À̰ÍÀÌ ¹Ù·Î Glade °¡ ÇÏ´ÂÀÏ ÀÔ´Ï´Ù. À̰ÍÀº GNOME UI µðÀÚÀ̳ʷΠ¿©·¯ºÐÀÌ UI¸¦ WYSIWYG ¹æ½ÄÀÇ ¿¡µðÅÍ·Î »ý¼ºÇÒ ¼ö ÀÖ°í À̰ÍÀ» UI XML Á¤ÀÇ ÆÄÀÏ·Î ÀúÀåÇÒ ¼ö ÀÖµµ·Ï ÇØ ÁÝ´Ï´Ù. ÀÌ Glade ÆÄÀÏÀº LibGlade API ¸¦ Áö¿øÇÏ´Â ¸ðµç GNOME ¾îÇø®ÄÉÀ̼ǿ¡¼­ ·ÎµùÀÌ °¡´ÉÇÏ°í ¶ÇÇÑ GNOME ¹ÙÀεùÀÇ ÀϺηεµ Áö¿ø µË´Ï´Ù.

ÀÌÁ¦ ¿©·¯ºÐÀº Glade ¿¡¼­ ¿©·¯ºÐÀÇ Hello World ¾îÇø®ÄÉÀÌ¼Ç º¸´Ù Á» ´õ º¹ÀâÇÑ UI »ý¼ºÇؼ­ Å×½ºÆ® ¾îÇø®ÄÉÀ̼ǿ¡¼­ ·ÎµùÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÊÀÚ´Â Andrew Overholt ÀÇ Ç÷¡½Ã µ¥¸ð¸¦ ÂüÁ¶ Çß½À´Ï´Ù. ±×¿¡°Ô °¨»çµå¸³´Ï´Ù (Ãßõ µµ¼­).

Glade ¸¦ ½ÇÇà½Ãŵ´Ï´Ù

¸ÞÀÎ Glade À©µµ¿ì°¡ Palette, Widget Tree, ±×¸®°íProperties ÆÐ³Î°ú ÇÔ²² ³ªÅ¸³³´Ï´Ù.

 
Figure 5: Glade User Interface Designer
±×¸² 5: Glade À¯Àú ÀÎÅÍÆäÀ̽º µðÀÚÀ̳Ê

ÀÌÁ¦ Palette "GTK+ Basic" ¼½¼Ç¿¡¼­ Window ¸¦ ¼±ÅÃÇÕ´Ï´Ù. 3ÁÙÀÇ Vertical Box ¸¦ À©µµ¿ì¿¡ Ãß°¡ ½Ãŵ´Ï´Ù (´Ü¼øÈ÷ ÆÈ·¿Æ® ¾ÆÀÌÅÛ¿¡ ¸¶¿ì½º¸¦ ¿Ã·Á ³õÀ¸¸é ±× ¾ÆÀÌÅÛÀÇ À̸§À» ¾Ë ¼ö ÀÖ½À´Ï´Ù). ±× ´ÙÀ½ Á¦ÀÏ À­ÁÙ¿¡ Label À» Ãß°¡½ÃŰ°í °¡¿îµ¥ ÁÙ¿¡ Button À» Ãß°¡½ÃŰ°í ¸¶Áö¸·À¸·Î Á¦ÀÏ ¾Æ·¡ÁÙ¿¡´Â Text ¿£Æ®¸® À§Á¬À» Ãß°¡ ½Ãŵ´Ï´Ù.

»ý¼ºµÈ À§Á¬µéÀÇ ¼Ó¼ºÀ» º¯°æÇÏ·Á¸é ´Ü¼øÈ÷ À§Á¬Æ®¸®¿¡¼­ ÇØ´ç À§Á¬À» ¼±ÅÃÇϰųª Çö À©µµ¿ì¿¡¼­ ¼±ÅÃÇØ¼­ ÇÁ·ÎÆÛƼ ÆÐ³ÎÀ» ÅëÇØ¼­ ¼öÁ¤ÇÕ´Ï´Ù.

 
Figure 6: TestGlade UI Created in the Glade UI Designer
Figure 6: TestGlade UI Created in the Glade UI Designer
Glade UI ¿Í ¾îÇø®ÄÉÀ̼ÇÀÇ ¿¬°á

¿©·¯ºÐÀÇ GNOME ¾îÇø®ÄÉÀ̼ÇÀÌ »õ·Î¿î Glade UI ¸¦ »ç¿ëÇϱâ À§Çؼ­´Â Glade ÆÄÀÏÀ» ¿©·¯ºÐÀÇ ¾îÇø®ÄÉÀÌ¼Ç »ý¼ºÀÚ¿¡¼­ ·Îµù½ÃÄÑ¾ß ÇÕ´Ï´Ù.

public TestGlade() {
    LibGlade glade = new LibGlade("glade/testglade.glade", this);
  }

NetBeans IDE ´Â LibGlade ¸¦ import Çϵµ·Ï Áö½ÃÇÒ °ÍÀ̰í ÀÌ È£Ãâ¿¡ try ºí·°À» Ãß°¡Çϵµ·Ï ÇÒ °ÍÀÔ´Ï´Ù. ¸¸¾à Glade ÆÄÀÏÀÌ ¾ø°Å³ª XML ÀÌ À߸øµÈ ÆÄÀÏÀ϶§ ¿¹¿Ü¸¦ ´øÁú°ÍÀ̱⠶§¹®ÀÔ´Ï´Ù. ¿ÏÀüÇÑ ÄÚµå ¼Ò½º´Â »ùÇà ÄÚµå ¸®½ºÆÃ ¿¡ ÀÖ´Â java-gnome-code.tar ÆÄÀϾȿ¡ TestGlade.java ¸¦ Âü°í ¹Ù¶ø´Ï´Ù.

ÀÌ·¯ÇÑ ¹æ¹ýÀº UI¸¦ »ý¼ºÇÏ´Â °¡Àå °£´ÜÇÑ ¹æ¹ýÀÌÁö¸¸ Çö ´Ü°è¿¡¼­´Â ¾Æ¹«·± ÀÛ¾÷µµ ÇÏÁö ¾Ê½À´Ï´Ù. ¿©·¯ºÐÀÌ ÇØ¾ßÇÒ ÀÛ¾÷Àº À¯Àú À̺¥Æ®¸¦ ¾îÇø®ÄÉÀÌ¼Ç Äڵ忡 Àü´ÞÇÔÀ¸·Î½á ±×¿¡ ¸Â°Ô µ¿ÀÛÇϵµ·Ï ÇØ¾ß ÇÕ´Ï´Ù. Glade ½Ã±×³Î Çڵ鷯°¡ ÇÊ¿äÇÑ µµ±¸¸¦ Á¦°øÇÕ´Ï´Ù.

½Ã±×³Î Çڵ鷯 -- GladeÀÇ ¾×¼Ç Çڵ鷯

Glade ¿¡¼­ ¸¸¾à ¿©·¯ºÐÀÌ »ç¿ëÀÚ ¹ÝÀÀ¿¡ µ¿ÀÛÇÏ´Â ÀÚ¹Ù Äڵ带 ÀÛ¼ºÇϰíÀÚ ÇÑ´Ù¸é ¿©·¯ºÐÀº Glade ³»ÀÇ À§Á¬¿¡ ½Ã±×³Î Çڵ鷯¸¦ ¼­·Î ¿¬°ü½ÃŰ°í ½Ã±×³Î Çڵ鷯 ±¸ÇöÀ» ¿©·¯ºÐÀÇ Äڵ忡¼­ Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº ù¹øÂ° ¿¹Á¦¿¡¼­ÀÇ ¾×¼Ç Çڵ鷯¸¦ ¼³Á¤ÇÏ´Â °Í°ú ¸Å¿ì À¯»çÇÑ ÀÛ¾÷ÀÔ´Ï´Ù. ¿©·¯ºÐÀº Glade ÀÇ ÁÖ¾îÁø ¾î¶°ÇÑ À§Á¬¿¡µµ ´Ù¾çÇÑ ¹üÀ§ÀÇ ½Ã±×³Î Çڵ鷯¸¦ ¿¬°ü½Ãų ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ½Ã±×³Î Çڵ鷯´Â ±× ´ÙÀ½ ¾îÇø®ÄÉÀÌ¼Ç Äڵ忡¼­ ±¸Çö µÇ¾îÁ®¼­ ¾îÇø®ÄÉÀÌ¼Ç ¼öÇà½Ã¿¡ ÀϾ´Â ÀûÀýÇÑ »ç¿ëÀÚÀÇ ¹ÝÀÀ¿¡ ´ë¶ó ½ÇÇàµÇ°Ô µË´Ï´Ù.

¹Ýµå½Ã °­Á¶µÇ¾î¾ßÇÒ ¾ê±â·Î ½Ã±×³Î Çڵ鷯¿Í ÀÚ¹Ù ±¸Çöü´Â ¹Ýµå½Ã Á¤È®ÇÏ°Ô µ¿ÀÏÇÑ À̸§À» °¡Áö°í ÀÖ¾î¾ß ÇÕ´Ï´Ù. ¿©·¯ºÐÀº ÀÚ¹Ù ¸Þ¼Òµå ±¸Çöü°¡ µ¿ÀÏÇÑ À̸§À» °¡Áö°í ÀÖ´Ù´Â °Í¸¸ ¸¸Á·ÇÑ´Ù¸é Glade ÀÇ ±âº» À̸§À» »ç¿ëÇϰųª Glade ³»¿¡¼­ ±×°ÍÀ» »ý¼º ȤÀº ¼öÁ¤ ÇÒ ¼ö ÀÖ½À´Ï´Ù.

TestGlade ¾îÇø®ÄÉÀ̼ÇÀ» È®ÀåÇØ¼­ "Press Me!" ¹öưÀ» Ŭ¸¯Çϸé "Button Clicked!" ¶ó´Â ¸Þ¼¼Áö¸¦ Ç¥ÁØ Ãâ·Â À©µµ¿ì¿¡ »ý¼ºÇϵµ·Ï ÇÕ´Ï´Ù.

ÀÏ´Ü Glade ÀÇ Test Glade ÇÁ·ÎÁ§Æ®·Î µ¹¾Æ °©´Ï´Ù.

À̰ÍÀº on_button1_clicked Çڵ鷯¸¦ »ý¼ºÇÕ´Ï´Ù. Glade ÇÁ·ÎÁ§Æ®¸¦ ÀúÀåÇÕ´Ï´Ù.

¾Æ·¡´Â Glade ÀÇ ½ºÅ©¸° ¼¦À¸·Î button1 ½Ã±×³Î Çڵ鷯 on_button1_clicked ¸¦ Properties ´ÙÀ̾ó·Î±×ÀÇ Signals ÅÇ¿¡¼­ ¼³Á¤ÇÑ È­¸é ÀÔ´Ï´Ù.

 
Figure 7: Adding a Signal Handler in the Glade UI Designer
±×¸² 7: Glade UI µðÀÚÀ̳ʿ¡¼­ ½Ã±×³Î Çڵ鷯¸¦ Ãß°¡½Ã۱â

NetBeans TestGlade ÇÁ·ÎÁ§Æ®·Î µ¹¾Æ °©´Ï´Ù.

public void on_button1_clicked() {
    System.out.println("Button Clicked!");
  }

TestGlade ¾îÇø®ÄÉÀ̼ÇÀ» ½ÇÇà½Ã۰í "Press Me!" ¹öưÀ» Ŭ¸¯Çؼ­ ½Ã±×³ÎÇڵ鷯ÀÇ µ¿ÀÛÀ» È®ÀÎ ÇÕ´Ï´Ù.

À§Á¬¿¡ Á¢±ÙÇϱâ

¾îÇø®ÄÉÀ̼ÇÀÌ ½Ã±×³Î Çڵ鷯¿¡¼­ »ç¿ëÀÚÀÇ µ¿ÀÛ¿¡ ¹ÝÀÀÇÒ¶§ ¿©·¯ºÐÀº Çϳª ȤÀº ±× ÀÌ»óÀÇ À§Á¬¿¡ Á¢±ÙÇØ¼­ ¾îÇø®ÄÉÀ̼ÇÀ» ƯÁ¤ÇÑ ¹æ½ÄÀ¸·Î ¼öÁ¤ÇØ¾ß µÉ Çʿ䰡 ÀÖÀ» °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¾î "Press Me!" ¸¦ Ŭ¸¯ÇßÀ»¶§ °øÁ¤µÈ ¸Þ¼¼Áö°¡ ³ªÅ¸³ª´Â °ÍÀÌ ¾Æ´Ï¶ó ¾îÇø®ÄÉÀ̼ÇÀÌ Text ¿£Æ®¸® À§Á¬¿¡ »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ ÅØ½ºÆ®¸¦ Ç¥ÁØ Ãâ·ÂÀ¸·Î Ãâ·ÂÇϱ⸦ ¿øÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÀÌ·¯ÇÑ ÀÛ¾÷À» À§Çؼ­´Â Glade À§Á¬ÀÇ ÇÚµéÀ» ¾ò¾î¿Í¼­ À̰ÍÀ» on_button1_clicked ½Ã±×³Î Çڵ鷯¿¡ ÀÇÇØ ÂüÁ¶µÇ´Â Ŭ·¡½º¿¡ ³»ºÎÀûÀ¸·Î ÀúÀåÇØ¾ß ÇÕ´Ï´Ù. ½ÇÁ¦ ÄÚµå »ý¼º ´Ü°è¿¡¼­ ¸¸¾à getWidget() È£ÃâÀÌ ¾î¶°ÇÑ ¿¹¿Üµµ ´øÁöÁö ¾Ê¾Ò´Ù¸é getWidget() È£Ãâ ÈÄ¿¡ "entry" °¡ Á¸ÀçÇÏ´ÂÁö È®ÀÎÇÒ °ÍÀÔ´Ï´Ù.

LibGlade glade = new LibGlade("glade/testglade.glade", this);
entry = (Entry)glade.getWidget("entry1");

ÀÌÀüÀÇ Äڵ带 ÀÔ·ÂÇß´Ù¸é NetBeans IDE ´Â "Create field entry in testglade.TestGlade" ¶ó´Â ¸Þ¼¼Áö¸¦ ÅëÇØ¼­ "private Entry entry;" ÀνºÅϽº º¯¼ö¸¦ Ãß°¡Çϵµ·Ï ¿ä±¸ÇÒ °ÍÀÔ´Ï´Ù. ÀÌÁ¦ ½Ã±×³Î Çڵ鷯¸¦ ¼öÁ¤Çؼ­ Text Entry À§Á¬ÀÇ ÅØ½ºÆ®¿¡ Á¢±ÙÇϵµ·Ï ÇÕ´Ï´Ù.

public void on_button1_clicked() {
    System.out.println("User typed: " + entry.getText());
  }

Á» ´õ º¹ÀâÇÑ ¿¹Á¦ - Calculator ¿¹Á¦

Á» ´õ Èï¹Ì·Î¿î ¾îÇø®ÄÉÀ̼ÇÀÇ ¿¹Á¦¸¦ À§ÇØ ÇÊÀÚ´Â NetBeans BlueJ Calculator ¿¹Á¦¸¦ °¡Á®¿Ô½À´Ï´Ù (David J. Barnes ¿Í Michael Kolling ¿¡ ÀÇÇØ ¸¸µé¾îÁü) ±×¸®°í À̰ÍÀ» Glade UI ¿Í ÀÚ¹Ù GNOME API ¸¦ »ç¿ëÇϵµ·Ï Æ÷ÆÃ ÇÏ¿´½À´Ï´Ù. ÄÚ¾î °è»ê±â CalcEngine Àº º¯°æÇÏÁö ¾Ê¾Ò½ººó´Ù. ÄÚµåÀÇ Àüü ¸ñ·ÏÀº ÀÌ ±ÛÀÇ ¸¶Áö¸·¿¡ ¿¹Á¦ ÄÚµå ¸ñ·ÏÀ» Âü°í ÇϽñ⠹ٶø´Ï´Ù.

 
Figure 8: Java GNOME Calculator Example
±×¸² 8: ÀÚ¹Ù GNOME Calculator ¿¹Á¦

¿£ÁøÀÌ ¿ÀÁ÷ ´õÇϱâ¿Í »©±â¸¸À» Áö¿øÇϱ⠶§¹®¿¡, ÇÊÀÚ´Â GNOME Calculator ÀÇ UI¸¦ Glade ¸¦ ÀÌ¿ëÇØ ¼Ö¶ó¸®½º¿¡¼­ µðÀÚÀÎ Çϸ鼭 Áö¿øµÇÁö ¾Ê´Â ¹öưµé¿¡ Sensitivity ¸¦ "No"¶ó°í ÁöÁ¤ÇÏ¿´½À´Ï´Ù(Properties Panel -> Common Tab).

¿©·¯ºÐÀÌ Äڵ带 »ìÆì º¸¾Ò´Ù¸é ¸î°¡Áö¸¦ »ìÆìº¼ °¡Ä¡°¡ ÀÖ½À´Ï´Ù.

GNOME ¾îÇø®ÄÉÀÌ¼Ç -- À̰ÍÀº GNOME ¾îÇø®ÄÉÀ̼ÇÀ¸·Î GTK+ ¾îÇø®ÄÉÀ̼ǰú´Â Á¤¹Ý´ë ÀÔ´Ï´Ù. Áï Glade ¿¡¼­ GNOME ¾îÇø®ÄÉÀ̼ÇÀ» »ý¼ºÇÒ¶§ ¿©·¯ºÐÀº ÀϹÝÀûÀÎ À©µµ¿ì¸¦ ½ÃÀÛ Æ÷ÀÎÆ®·Î »ç¿ëÇÏ´Â °Í°ú´Â ¹Ý´ë·Î ÆÈ·¿Æ® "GNOME" ¼½¼Ç¿¡¼­ ¾îÇø®ÄÉÀÌ¼Ç À©µµ¿ì¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾îÇø®ÄÉÀÌ¼Ç À©µµ¿ì´Â ÃÖ»óÀÇ ·¹º§ ¸Þ´º, Åø¹Ù, »ç¿ëÀÚ°¡ ¿øÇϴ´ë·Î ¼öÁ¤ÇÒ ¼ö ÀÖ´Â app ¹Ù(»óÅ ¸Þ¼¼Áö)¸¦ °¡Áö°í ÀÖ½À´Ï´Ù.

ÀÌÀü¿¡ ³íÀÇ Çß¾ú´ø Program.initGnomeUI ¸¦ ÀÌ¿ëÇØ¼­ GTK ¾îÇø®ÄÉÀ̼ÇÀ» ÃʱâÈ­ ½ÃÄ×´ø ¹æ¹ý°ú´Â ¾à°£ ´Ù¸£°Ô ÃʱâÈ­ µË´Ï´Ù:

public static void main(String[] args) {

    Program prog = Program.initGnomeUI("Calculator", "1.0", args);

    new CalculatorApp();

    Gtk.main();

  }

¸í¸íµÈ ¿ÀºêÁ§Æ®¸¦ ½Ã±×³Î Çڵ鷯¿¡ Àü´ÞÇϱâ -- Á¾Á¾ ¿©·¯ºÐÀº ÁÖ¾îÁø ¿ÀºêÁ§Æ®¸¦ ½Ã±×³Î Çڵ鷯¿Í ¿¬°ü½ÃÄѼ­ ½Ã±×³Î Çڵ鷯°¡ UI¿¡ ÀÇÇØ Æ®¸®°Å µÆÀ»¶§ À̰ÍÀ» Àü´ÞÇÏ´Â °ÍÀÌ ÇÊ¿äÇÒ ¼ö ÀÖ½À´Ï´Ù. °è»ê±â ¿¹Á¦¸¦ ¿¹¸¦ µé¾î °¢ ÇÔ¼ö ¹öư¸¶´Ù °¢°¢ÀÇ ½Ã±×³Î Çڵ鷯¸¦ °¡Áö´Â °Í ´ë½Å¿¡ ÇϳªÀÇ ½Ã±×³Î Çڵ鷯¸¦ µÎ°í À¯Àú°¡ ¹öưÀ» ´©¸£´Â °Í¿¡ µû¶ó ÀԷ°ªÀ» ó¸®ÇÏ´Â °ÍÀ» ¿øÇÒ ¼ö ÀÖ½À´Ï´Ù. Glade ¿¡¼­ ÀÌ·¯ÇÑ ÀÛ¾÷À» ¼öÇàÇÏ´Â ¹æ¹ýÀº ¹öưÀÇ ½Ã±×³Î Çڵ鷯¸¦ ¼³Á¤ÇÒ ¶§ ¹öưÀÇ À̸§¿¡ Object Çʵ带 ¹öưÀÇ À̸§À¸·Î ¼³Á¤ÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ ¹æ¹ýÀ» ÅëÇØ¼­ ¸í¸íµÈ ¹öưÀº ½Ã±×³Î Çڵ鷯·Î Àü´ÞµÇ°Ô µË´Ï´Ù. ÀÌ ¿ÀºêÁ§Æ®¸¦ ó¸®ÇÏ´Â °ÍÀº ´Ü¼øÈ÷ ¿À¹ö·ÎµùµÈ ½Ã±×³Î Çڵ鷯¸¦ ÀÚ¹Ù ÄÚµå¾È¿¡¼­ »ç¿ëÇÔÀ¸·Î½á ÀûÀýÇÑ Event À§Á¬°ú ¹ü¿ë Ÿ°Ù Object ¸¦ ÃëÇÏ´Â °ÍÀÔ´Ï´Ù. À̶§ ÀûÀýÇÑ Ä³½ºÆÃ ÀÛ¾÷ÀÌ ¹Ýµå½Ã ÇÊ¿ä ÇÕ´Ï´Ù.

public void on_button_clicked(ButtonEvent event, Object target) {
    // Get the Named Button Widget set as the Signal Handler Object in Glade

    String command = ((Button) target).getLabel();

    System.out.println("Button Clicked: " + command);


    if( command.equals("0") || command.equals("1") ||
        command.equals("2") || command.equals("3") ||

	:

GConf -- À̰ÍÀº GNOME ÀÇ ¼³Á¤ ½Ã½ºÅÛÀ¸·Î À¯Àú ¾îÇø®ÄÉÀ̼ÇÀÇ ¼³Á¤°ú µ¥ÀÌŸ¸¦ ÀúÀåÇϱâ À§ÇØ ¹Ýµå½Ã »ç¿ëµÇ¾î¾ß ÇÕ´Ï´Ù. Ãß°¡ÀûÀ¸·Î ÀÌ ÇÁ·Î±×·¥Àº ¾îÇø®ÄÉÀ̼ÇÀÌ »ç¿ëÇØ¾ßÇÒ GNOME ÀÇ ½Ã½ºÅÛ Àü¹ÝÀûÀÎ µ¥ÀÌŸ (¿¹¸¦ µé¾î ³×Æ®¿öÅ© Ŭ¶óÀÌ¾ðÆ®¸¦ À§ÇÑ ÇÁ·Ï½Ã ¼ÂÆÃ) ¸¦ °¡Á® ¿À´Âµ¥ »ç¿ë µÉ ¼ö ÀÖ½À´Ï´Ù. GConf ÀÇ »ç¿ë ¿¹¸¦ À§Çؼ­ UserInterface.java ¿¡ ¿©·¯°¡Áö ÇÔ¼öµéÀÌ Ãß°¡µÇ¾îÁ³½À´Ï´Ù. ù°·Î GConf ¸¦ ÃʱâÈ­ Çϱâ À§Çؼ­ ±×¸®°í µÑ°·Î calculator ¿¡ ÀÔ·ÂµÈ ¸¶Áö¸· ¼ýÀÚ¸¦ get/set Çϱâ À§Çؼ­ ÀÔ´Ï´Ù. ÀÌ µ¥ÀÌŸ´Â »ç¿ëÀÚ°¡ File-> Quit ¸¦ »ç¿ëÇØ¼­ ¾îÇø®ÄÉÀ̼ÇÀ» ´ÝÀ»¶§ GConf ½Ã½ºÅÛ¿¡¼­ calculator¸¦ ½ÇÇàÇÏ´Â »çÀÌ¿¡ ÀúÀåµÇ¾î Áý´Ï´Ù. GConf ÀÇ »ç¿ëÀº ´Ü¼øÈ÷ GConf ½Ã½ºÅÛÀÇ ÇÚµéÀ» ¾ò´Â °Í¸¸À» ¿ä±¸ ÇÕ´Ï´Ù. ±×´ÙÀ½¿¡´Â ConfClient ¿¡´Â »óÈ£ ÀÛ¿ëÇÒ µð·ºÅ丮¸¦ ÁöÁ¤ÇÔÀ¸·Î½á ÃßÈÄ¿¡ ÀÌ Å¬¶óÀÌ¾ðÆ® ÀνºÅϽº¸¦ ÀÌ¿ëÇØ¼­ GConf ÀÇ Å° °ªµéÀ» »ý¼ºÇÏ°í °¡Á®¿À°í ÀúÀåÇÒ ¼ö ÀÖ½À´Ï´Ù.

private final String lastResultKey = 
        "/apps/javagnome_calculator_app/last_result";
		:
public void setupGconfAccess() {
  client = ConfClient.getInstance();
  try {

    client.addDirectory("/apps/javagnome-calculator-app", 
        ConfClientPreloadType.NONE);
     
     :
 public String getGconfKeyValue(String configKey){
   try {
      return client.getString(configKey);
      :

 public void setGconfKeyValue(String configKey, String configKeyValue){
   try {
      if (null != configKeyValue)
        client.setString(configKey, configKeyValue);
      :

¿©·¯ºÐÀº ¶ÇÇÑ ConfClientListener ¸¦ ConfClient ÀνºÅϽº¿¡ ÁöÁ¤Çؼ­ ƯÁ¤ GConf Ű °ªÀÇ º¯°æ¿¡ ´ëÇÑ ÅëÁö¸¦ ¾òÀ» ¼öµµ ÀÖ°í, ¿øÇÑ´Ù¸é client.addListener (listener, configKey) ¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

´õ ±íÀÌ µé¾î°¡±â

ÇØ¾ßÇÒ ÀÏÀÌ ¾ÆÁ÷ ¸¹ÀÌ ³²¾Æ ÀÖ½À´Ï´Ù. ÀÚ¹Ù GNOME ¹ÙÀεù¿¡ °°ÀÌ Á¦°øµÇ´Â ¿¹Á¦µéÀ» »ìÆì º¸½Ã±â ¹Ù¶ø´Ï´Ù. ƯÈ÷ ´ÙÀ½ÀÇ TestGtk ¿Í TestGnome ¾îÇø®ÄÉÀ̼ÇÀ» Âü°íÇϽñ⠹ٶø´Ï´Ù:

/usr/share/lib/java/javadoc/java-gnome/libgtk-java-##/examples/testgtk/TestGTK

/usr/share/lib/java/javadoc/java-gnome/libgnome-java-##/examples/testgnome/TestGNOME

GConf ¿Í Glade ¿¹Á¦µéÀº ¶ÇÇÑ ÀÌÀü¿¡ ¾ð±ÞÇß´ø javadoc/java-gnome µð·ºÅ丮ÀÇ libgcon,libglade ¼­ºêµð·ºÅ丮µé »ó¿¡¼­ ¹ß°ßÇÒ ¼ö ÀÖ½À´Ï´Ù. ½Ç¼¼°èÀÇ ¾îÇø®ÄÉÀ̼ÇÀº ÀÚ¹Ù GNOME Ä¿¹Â´ÏƼ »çÀÌÆ®¸¦ Âü°íÇϽñ⠹ٶø´Ï´Ù. (Ãßõ µµ¼­ ¼½¼ÇÀÇ "Java GNOME application" Âü°í). #java-gnome ä³Î (irc.gimp.net) ¿¡ µé·Á¼­ °³¹ßÀÚµé°ú äÆÃÀ» Çϰųª ¹ÙÀεù¿¡ ±Ã±ÝÇÑ Áú¹®À» ÇØÁּŵµ µË´Ï´Ù. ¸¸¾à ¿©·¯ºÐÀÇ ¸ÚÁø ¾îÇø®ÄÉÀ̼ÇÀ» ¾Ë·ÁÁÖ°í ½Í´Ù¸é ±×µéÀÌ ¿©·¯ºÐÀ» µµ¿ÍÁÙ °ÍÀÔ´Ï´Ù!

°á·Ð

ÀÚ¹Ù GNOME ¹ÙÀεùÀº Glade-±â¹Ý GNOME/GTK+ ¾îÇø®ÄÉÀÌ¼Ç °³¹ß¿¡ Àͼ÷ÇÑ °³¹ßÀڵ鿡°Ô ÀÌ·¯ÇÑ Á¤·ùÀÇ µ¥½ºÅ©Å¾ ¾îÇø®ÄÉÀ̼ÇÀ» Àڹ٠ȯ°æ¿¡¼­ °³¹ßÇÒ ¼ö ÀÖ´Â ½Ç¿ëÀûÀÎ ¹æ¹ýÀ» Á¦°ø ÇÕ´Ï´Ù. ÇöÀç ÄÚ¾î ¶óÀ̺귯¸®ÀÇ ´ëºÎºÐÀ» »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ GNOME ¾ÖÇø´ Áö¿øÀ̳ª ½Ã½ºÅÛ Æ®·¹ÀÌ Áö¿ø °°Àº ¸î°¡Áö ºÎºÐÀÌ ºüÁ® ÀÖ½À´Ï´Ù.

ÀÚ¹Ù GNOME Ä¿¹Â´ÏƼ´Â ÀÌ¹Ì ¹ÙÀεùÀÇ ÀçµðÀÚÀÎÀ» ÅëÇØ Á»´õ ÀÚµ¿È­µÈ ¹ÙÀεù »ý¼ºÀ» Áö¿øÇϵµ·Ï ³ë·ÂÇϰí ÀÖ½À´Ï´Ù. ÀÌ ÀÛ¾÷Àº GNOME Ç÷§Æû°ú Cairo ³×ÀÌÆ¼ºê ¶óÀ̺귯¸®ÀÇ API¸¦ °ÅÀÇ 100% »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÒ °ÍÀÌ°í ¾ÕÀ¸·ÎÀÇ GNOME Ç÷§Æû ¹èÆ÷ÆÇ°ú µ¿±âÈ­ µÇµµ·Ï ÇÒ °ÍÀÔ´Ï´Ù.

Ä¿¹Â´ÏƼ »çÀÌÆ®¸¦ ÅëÇØ¼­ Ãֽо÷µ¥ÀÌÆ®¸¦ Ç×»ó È®ÀÎÇϽñ⠹ٶø´Ï´Ù. Ä¿¹Â´ÏƼ´Â ¾ðÁ¦³ª ÇÁ·ÎÁ§Æ®ÀÇ »õ·Î¿î °øÇåÀÚ¸¦ ȯ¿µÇÕ´Ï´Ù. ÀÚ ÀÌÁ¦ ÀÚ¹Ù GNOME À» ÇØÅ·ÇØ º¾½Ã´Ù!

ÀúÀÚ¿¡ °üÇÏ¿©

John Rice ´Â ½ãÀÇ staff engineer ·Î Áö³­ ¼ö³â°£ ¿ÀǼֶ󸮽º µ¥½ºÅ©Å¾ ±×·ì¿¡¼­ ÀÏÇØ ¿Ô½À´Ï´Ù. ÀÌ Àü¿¡ ±×´Â ¿ÀÇ¿ÀÇǽº ÆÀ¿¡¼­ ÀÏÇß¾ú°í ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® ¿ÀÇǽºÀÇ ¸ÅÅ©·Î¸¦ ¿ÀÇ¿ÀÇǽº·Î ÀÚµ¿ ¸¶À̱׷¹ÀÌ¼Ç ÇÏ´Â ÀÛ¾÷À» ÇØ¿Ô½À´Ï´Ù. ±×´Â ¼ÒÇÁÆ®¿þ¾î ºÐ¾ß¿¡¼­ 18³âÀÇ °³¹ß °æ·ÂÀ» °¡Áö°í ÀÖ°í ´ëºÎºÐÀº ¹®¼­ °ü¸®°ú µ¥½ºÅ©Å¾ ¾îÇø®ÄÉÀÌ¼Ç °³¹ßÀÔ´Ï´Ù. GNOME Advisory Board ÀÇ ¸â¹ö·Î John Àº ¾ÆÀÏ·£µåÀÇ µ¿ÂÊ ÇØº¯¿¡ »ì°í ÀÖ½À´Ï´Ù.

Ãßõ µµ¼­
°ü·Ã ÀÚ·á

Solaris Express, Developer Edition 2/07 - Java GNOME 2.16 installation:

¿¹Á¦ ÄÚµå ¸ñ·Ï

¿¹Á¦ ÄÚµå ¸ñ·ÏÀº java-gnome-code.tar ÆÄÀÏ¿¡¼­ »ç¿ëÀÌ °¡´ÉÇÕ´Ï´Ù. tar ÆÄÀÏÀÇ ³»¿ëÀº ¾Æ·¡¿Í °°½À´Ï´Ù:

java-gnome-code/
java-gnome-code/testglade/
java-gnome-code/testglade/TestGlade.java
java-gnome-code/testglade/glade/
java-gnome-code/testglade/glade/testglade.glade.txt
java-gnome-code/licensing.txt
java-gnome-code/hello/
java-gnome-code/hello/Hello.java
java-gnome-code/calculator/
java-gnome-code/calculator/UserInterface.java
java-gnome-code/calculator/CalcEngine.java
java-gnome-code/calculator/CalculatorApp.java
java-gnome-code/calculator/glade/
java-gnome-code/calculator/glade/calculator.glade.txt

ÁÖÀÇ: glade.txt ·Î ³¡³ª´Â ÆÄÀϵéÀº .glade ÆÄÀÏ·Î »ç¿ë Àü¿¡ Àç¸í¸í µÇ¾î¾ß ÇÕ´Ï´Ù.