.
.
Core Java
Technologies Technical Tips
.
 
2005³â 7¿ù 04ÀÏ  


Core Java Technologies Tech Tips¿¡ ¿À½Å ¿©·¯ºÐÀ» ȯ¿µÇÕ´Ï´Ù. Java 2 Platform, Standard Edition (J2SE)¿¡ ±â¹ÝÇÑ core Java technologies ¿Í APIsÀÇ »ç¿ë¿¡ °üÇÑ ÃֽŠÁ¤º¸¸¦ ¾ò¾î °¡½Ã±â ¹Ù¶ø´Ï´Ù. ÀÌ ±Û¿¡¼­´Â Java 2 Platform Standard Edition Development Kit 5.0(JDK 5.0)À» »ç¿ëÇÕ´Ï´Ù.
Download JDK 5.0

À̹ø È£¿¡¼­´Â,

-JDIC¸¦ ÀÌ¿ëÇÑ NATIVE APPLICATION°úÀÇ Åë½Å
-Çâ»óµÈ ·çÇÁ¹®

À» ´Ù·ç°Ô µË´Ï´Ù.

ÀúÀÚ Daniel H. Steinberg

.

JDIC¸¦ ÀÌ¿ëÇÑ NATIVE APPLICATION°úÀÇ Åë½Å

JDesktop ÅëÇÕ ÄÄÆ÷³ÍÆ®(JDIC) (https://jdic.dev.java.net)´Â ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ÇÀÌ native desktop¿¡ ÅëÇÕÇÒ ¼ö ÀÖ°Ô Çϸç, ÀÌ ¾ÖÇø®ÄÉÀ̼ǵéÀÌ À¥ºê¶ó¿ìÀú³ª À̸ÞÀÏÅø°ú °°Àº ¿î¿µ½Ã½ºÅÛ ÁöÁ¤ ÇÁ·Î±×·¥¿¡¼­ Á¦°øµÇ´Â ±â´ÉÀÇ ÀÌÁ¡À» »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. JDIC´Â ÇöÀç ¼Ö¶ó¸®½º 8¹öÀü ÀÌ»ó, JDS(the Sun Java Desktop System) 1¹öÀü ÀÌ»ó, ´Ù¾çÇÑ À©µµ¿ì(ME, NT, XP, 2003, and 2000), SuSE ¸®´ª½º 7 ¹öÀü ÀÌ»ó ±×¸®°í ·¹µåÇÞ ¸®´ª½º 8¹öÀü À̻󿡼­ Áö¿øµÈ´Ù. ¶Ç ÀÌÈÄ ¹öÀü¿¡¼­´Â Mac OS X¿¡¼­µµ Áö¿øµÉ ¿¹Á¤ÀÌ´Ù.

À̹ø Å×Å©ÆÁ¿¡¼­´Â JEditorPaneÀ» ÀÌ¿ëÇØ¼­ À¥ÆäÀÌÁö¸¦ ·ÎµùÇØº¸°í, ÀÌ ¹æ¹ýÀÇ ¸î°¡Áö Á¦ÇÑ»çÇ׿¡ ´ëÇØ¼­ »ý°¢Çغ¸ÀÚ. JDICÀÇ µÎ °¡Áö ´Ù¸¥ ±â´ÉÀ» »ç¿ëÇÏ¿© »ç¿ëÀÚÀÇ À¥ ºê¶ó¿ìÀú¿¡¼­ À¥ÆäÀÌÁö(JFrameÀÇ ÀϺηνá)¸¦ º¸µµ·Ï ÇÑ´Ù.

¸¹Àº Swing ÄÄÆ÷³ÍÆ®·Î HTMLÀ» ³ªÅ¸³¾ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½°ú °°ÀÌ JEditorPaneÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

   private void loadStartingPage() {
     JEditorPane editor = new JEditorPane();
     editor.setEditable(false);
     try {
       editor.setPage("http://www.java.net/");
     } catch (IOException e) {
       System.err.println("can't connect");
     }
   }

URLÀÌ Á¢±Ù°¡´ÉÇÏ´Ù¸é, °á°ú ÆäÀÌÁö°¡ JEditorPane»ó¿¡¼­ º¸¿©Áö°Ô µÉ °ÍÀÌ´Ù. ¹°·Ð, JScrollPaneÀÌ Æ÷ÇÔµÈ JFrameÀÌ Á¦°øµÇ¾îÇϸç, JScrollPane¿¡´Â JEditorPaneÀÌ Æ÷ÇԵǾî¾ß Çϸç, ¾²·¹µå ¾ÈÁ¤¼ºÀ» À§ÇØ, ¶ÇÇÑ event-dispatching thread »óÀÇ ¾÷¹«¸¦ ½ºÄÉÁÙ¸µÇÏ¿© GUI¸¦ »ý¼ºÇؾßÇÑ´Ù. ´ÙÀ½ÀÇ Å¬·¡½º¿¡¼­ À̸¦ º¸¿©ÁÖ°í ÀÖ´Ù.

   import javax.swing.JScrollPane;
   import javax.swing.JEditorPane;
   import javax.swing.JFrame;
   import javax.swing.SwingUtilities;
   import java.io.IOException;
   import java.awt.Dimension;

   public class EditorPaneHTMLViewer extends JEditorPane {
     private JScrollPane createScrollPane() {
       JScrollPane editorScrollPane = new JScrollPane(this);
       editorScrollPane.setPreferredSize(
               new Dimension(700, 500));
       return editorScrollPane;
     }

     private void loadStartingPage() {
       setEditable(false);
       try {
         setPage("http://www.java.net/");
       } catch (IOException e) {
         System.err.println("can't connect/");
       }
     }

     private void createAndShowGUI() {
       JFrame frame = new JFrame("EditorPaneHTMLViewer/");
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       JScrollPane content = createScrollPane();
       loadStartingPage();
       frame.add(content);
       frame.pack();
       frame.setVisible(true);
     }

     public static void main(String[] args) {
       //Schedule a job for the event-dispatching thread:
       SwingUtilities.invokeLater(new Runnable() {
         public void run() {
           (new EditorPaneHTMLViewer()).createAndShowGUI();
         }
       });
     }
   }

ÁÁÀº ¼Ò½ÄÀº ÀÌ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇÏ°í ±¸µ¿ÇÏ¸é °á°ú HTMLÀÌ JEditorPane¿¡ º¸¿©Áø´Ù´Â °ÍÀÌ´Ù. ±×·¯³ª ÇöÀçÀÇ HTML Áö¿ø±â´É¿¡¼­ ¿ÏÀüÈ÷ ³ªÅ¸³»Áö ¸øÇÏ´Â ÃֽŠǥÁØ ÆäÀÌÁöµéÀÌ ¸¹´Ù´Â °Í ¶ÇÇÑ ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù.

HTML Viewer

±×·¯³ª ¿Ïº®ÇÑ À¥ºê¶ó¿ìÀú°¡ ¼³Ä¡µÈ´ÙÇÏ´õ¶óµµ JEditorPane°ú °°Àº Swing ÄÄÆ÷³ÍÆ®ÀÇ À¥ ÆäÀÌÁöµéÀ» ¿ÏÀüÇÏ°Ô º¼ ¼ö´Â ¾øÀ¸¸ç, À̸¦ ÇØ°áÇØÁÖ´Â °ÍÀÌ JDICÀÌ´Ù. JDIC ÆÐŰÁö Áß ÇϳªÀÎ org.jdesktop.jdic.desktop.Desktop¿¡ ÀÖ´Â browse() ¸Þ¼Òµå¸¦ È£ÃâÇÏ¿© »ç¿ëÀÚÀÇ ±âº» À¥ºê¶ó¿ìÀúÀÇ Æ¯Á¤ ÆäÀÌÁö¸¦ ¿¬´Ù. browse() ¸Þ¼Òµå¸¦ È£ÃâÇÒ ¶§´Â ´ÙÀ½ÀÇ ¿¹Á¦¿¡¼­¿Í °°ÀÌ java.net.URL ¿ÀºêÁ§Æ®¸¦ Àü´ÞÇØ¾ßÇÑ´Ù.

   import org.jdesktop.jdic.desktop.Desktop;
   import org.jdesktop.jdic.desktop.DesktopException;
   import java.net.URL;
   import java.net.MalformedURLException;

   public class OpenWithRegisteredApp {

     public static void main(String[] args) {
       try {
         Desktop.browse(new URL("http://www.java.net/"));
       } catch (MalformedURLException e){
         System.err.println("couldn't connect");
         e.printStackTrace();
       } catch (DesktopException e){
         e.printStackTrace();
       }
     }
   }

¿¹Á¦ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇϱâ À§Çؼ­´Â jdic.jar ÆÄÀÏÀ» »ç¿ëÀÚÀÇ Å¬·¡½º ÆÐ½º¿¡ Æ÷ÇÔ½ÃÄѾßÇÑ´Ù. ÇÁ·Î±×·¥À» ±¸µ¿ÇÏ·Á¸é JVMÀÌ Ã£À» ¼ö ÀÖ´Â °÷¿¡ native library°¡ Æ÷ÇԵǾî ÀÖ¾î¾ß ÇÑ´Ù. ¶Ç´Â, ·±Å¸Àӽÿ¡ -Djava.library.path=¸¦ »ç¿ëÇÏ¿© jar ÆÄÀϰú native library¸¦ ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù. (native library¸¦ Æ÷ÇÔÇÏ´Â µð·ºÅ丮·ÎÀÇ ÆÐ½º°¡ µÚµû¸¥´Ù). ¿¹¸¦ µé¾î À©µµ¿ì¿¡¼­ jar file°ú dll fileÀ» »ç¿ëÀÚÀÇ ÇÁ·Î±×·¥À» Æ÷ÇÔÇϰí ÀÖ´Â µð·ºÅ丮¿¡ º¹»çÇϸé, ´ÙÀ½ÀÇ ¸í·É¹®À» »ç¿ëÇÏ¿© ÇÁ·Î±×·¥À» ±¸µ¿ÇÒ ¼ö ÀÖ´Ù.

   java -classpath jdic.jar;. -Djava.library.path=. 
   OpenWithRegisteredApp

¹®¼­ ±¸¼º»ó ¸í·É¹®ÀÌ µÎ ¶óÀÎÀ¸·Î º¸¿©Áö´Â °ÍÀÓÀ» ÁÖÀÇÇÏÀÚ. ½ÇÁ¦·Î´Â ¸í·É¹®À» ÇÑ °³ÀÇ ¶óÀο¡ ÀÔ·ÂÇØ¾ßÇÑ´Ù.

ÀÌ¿¡ ´ëÇÑ °á°ú·Î, »ç¿ëÀÚÀÇ ±âº» ºê¶ó¿ìÀú°¡ ¿­¸®°í java.netÀÇ Ã³À½ ÆäÀÌÁö¸¦ ·ÎµùÇÑ´Ù.

Registered App

JDIC API´Â ¶ÇÇÑ native desktop application¿¡ ¾×¼¼½ºÇÏ°í »óÈ£ÀÛ¿ëÇϱâ À§ÇØ »ç¿ëÀÚ°¡ ¼öÇàÇϰíÀÚ ÇÏ´Â ´Ù¸¥ ¿¬»êÀ» Áö¿øÇÑ´Ù. ¿¡µðÅ͸¦ ½ÃÀÛÇÏ¿© ƯÁ¤ ÆÄÀÏÀ» ÆíÁýÇÒ ¼ö ÀÖ°í, À©µµ¿ì¸¦ ¿­¾î ±âº» ¸ÞÀÏÇÔ¿¡¼­ »õ·Î¿î ¸Þ½ÃÁö¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖÀ¸¸ç, ÁÖ¾îÁø ÆÄÀÏ¿¡ µî·ÏµÈ ¾ÖÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇϰųª ÆÄÀÏÀÇ ÄÁÅÙÃ÷¸¦ ÇÁ¸°Æ®ÇÒ ¼öµµ ÀÖ´Ù. ÀÌ·± ¸Þ¼ÒµåµéÀ» »ç¿ëÇÏ´Â ÀÚ¼¼ÇÑ ¹æ¹ýÀº OpenWithRegisteredApp ¿¹Á¦¿¡¼­ browse()°¡ »ç¿ëµÈ ¹æ¹ý°ú ºñ½ÁÇÏ´Ù.

±×·¯³ª Java ¾ÖÇø®ÄÉÀÌ¼Ç ¾È¿¡¼­ À¥ÆäÀÌÁö¸¦ ³ªÅ¸³»°í ½ÍÀ» ¶§°¡ ÀÖÀ» °ÍÀÌ´Ù. ¿ÜºÎ À¥ ºê¶ó¿ìÀú¸¦ ¶ç¿ì´Â ´ë½Å, JEditorPaneÀÇ Ãʱâ ÇüÅ·Π¹Ù²ÙÁö ¾Ê°í »ç¿ëÀÚÀÇ JFrame ¾ÈÀÇ À¥ ÄÁÅÙÃ÷¸¦ º¸ÀÌ°í ½ÍÀ» °ÍÀÌ´Ù. ¶Ç´Ù¸¥ JDIC ÄÄÆ÷³ÍÆ®ÀÎ org.jdesktop.jdic.browser.WebBrowserŬ·¡½º´Â ÀÌ ÀÌÀ¯¿¡¼­ ¸¸µé¾îÁ³´Ù. WebBrowser´Â java.awt.Canvas¸¦ È®ÀåÇÏ¿© »ç¿ëÀÚÀÇ JFrame¿¡ Á÷Á¢ÀûÀ¸·Î Ãß°¡µÉ ¼ö ÀÖ´Ù. ´ÙÀ½Àº WebBrowser Ŭ·¡½º¸¦ ÀÌ¿ëÇÑ ¿¹Á¦ÀÌ´Ù.

   import org.jdesktop.jdic.browser.WebBrowser;
   import javax.swing.JFrame;
   import javax.swing.SwingUtilities;
   import java.net.URL;
   import java.net.MalformedURLException;
   import java.awt.Dimension;

   public class JDICBrowser {

     private WebBrowser webBrowser = new WebBrowser();

     private void loadStartingPage() {
       try {
         webBrowser.setURL(new URL("http://www.java.net"));
       } catch (MalformedURLException e) {
         System.out.println(e.getMessage());
       }
     }

     private void createAndShowGUI() {
       JFrame frame = new JFrame("JDIC Browser");
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setPreferredSize(new Dimension(700,500));
       loadStartingPage();
       frame.add(webBrowser);
       frame.pack();
       frame.setVisible(true);
     }

     public static void main(String[] args) {
       //Schedule a job for the event-dispatching thread:
       SwingUtilities.invokeLater(new Runnable() {
         public void run() {
           (new JDICBrowser()).createAndShowGUI();
         }
       });
     }
   }

ºñ·Ï ÄÚµå´Â óÀ½ ¹öÀü°ú ºñ½ÁÇÏ°Ô º¸À̰ÚÁö¸¸, °á°ú·Î´Â ¿ÏÀüÈ÷ Ç¥ÇöµÈ À¥ÆäÀÌÁö·Î ³ªÅ¸³­´Ù.

JDIC Browser

ÅØ½ºÆ® Çʵå¿Í ¹öưÀ» ÀÌ ¹öÀüÀ̳ª ù¹øÂ° ¹öÀü¿¡ Ãß°¡ÇÒ ¼ö ÀÖ´Ù. À̸¦ ÅëÇØ »ç¿ëÀÚ´Â ´Ù¸¥ ÆäÀÌÁöÀÇ URLÀ» ÀÔ·ÂÇϰí È÷½ºÅ丮¸¦ Ž»öÇÒ ¼ö ÀÖ´Ù. WebBrowserListener Ŭ·¡½º¸¦ ±¸ÇöÇÏ¿© Á» ´õ ³ªÀº »ç¿ëÀÚ °æÇèÀ» Á¦°øÇϴµ¥ ÄݹéÀÇ ÀÌÁ¡À» »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ´ÙÀ½Àº ÀÌ¿¡ ´ëÇÑ ¿¹Á¦·Î½á ±× ¸Þ¼Òµåµé Áß µÎ°¡Áö¸¦ ±¸ÇöÇÏ´Â Àû¿ë Ŭ·¡½ºÀÌ´Ù.

  import org.jdesktop.jdic.browser.WebBrowserListener;
   import org.jdesktop.jdic.browser.WebBrowserEvent;

   public class WebBrowserAdapter implements WebBrowserListener {
     public void downloadStarted(WebBrowserEvent e){
       System.out.println("Download Started");
     }
     public void downloadCompleted(WebBrowserEvent e){
       System.out.println("Download Completed");
     }
     public void downloadProgress(WebBrowserEvent e){}
     public void downloadError(WebBrowserEvent e){}
     public void documentCompleted(WebBrowserEvent e){}
     public void titleChange(WebBrowserEvent e){}
     public void statusTextChange(WebBrowserEvent e){}
   }

´ÙÀ½°ú °°ÀÌ createAndShowGUI() ¸Þ¼Òµå¸¦ ¼öÁ¤ÇÏ¿© ÀÌ WebBrowserListener ¸¦ Ãß°¡ÇÒ ¼ö ÀÖ´Ù.

   //...
   loadStartingPage();
   // add the following line:
   webBrowser.addWebBrowserListener(new WebBrowserAdapter());
   ...
JDICBrowser¸¦ À籸µ¿½ÃŰ¸é ´Ù¿î·Îµå°¡ ½ÃÀÛ/¿Ï·áµÇ´Â Ç¥ÁØ ¹ÝÀÀÀÌ ³ªÅ¸³­´Ù.

   C:\techtips\May05>java JDICBrowser
   Download Started
   Download Completed
   Download Started
   Download Started
   Download Completed

À̹ø Å×Å©ÆÁÀÇ Æ÷ÀÎÆ®´Â Á» ´õ ³ªÀº ºê¶ó¿ìÀú¸¦ ±¸ÃàÇÏ´Â ¹ýÀ» º¸¿©ÁÖ´Â °ÍÀÌ ¾Æ´Ï¶ó, JDIC ¿ÀǼҽº ÇÁ·ÎÁ§Æ®ÀÇ Å¬·¡½ºµéÀ» »ç¿ëÇÏ¿© native component¸¦ ¾ó¸¶³ª ½±°Ô ÅëÇÕÇÒ ¼ö ÀÖ´ÂÁö º¸¿©ÁÖ´Â °ÍÀÌ´Ù.

JDIC¿¡ °üÇÑ Á» ´õ ¸¹Àº Á¤º¸´Â JDIC project page¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù.

.
.

Çâ»óµÈ ·çÇÁ¹®

J2SE 5.0ÀÇ »õ·Î¿î ¾ð¾î ±â´ÉÀ¸·Î ¼Ò°³µÈ Çâ»óµÈ ·çÇÁ¹®(enhenced for loop)Àº Iterator¸¦ »ý¼ºÇϰųª Ä«¿îÅÍ º¯¼öÀÇ ½ÃÀÛ°ú ³¡ »óŸ¦ °è»êÇÒ ÇÊ¿ä ¾øÀÌ ÄÝ·º¼ÇÀ» ¹Ýº¹ÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. Çâ»óµÈ ·çÇÁ¹®Àº J2SE 5.0ÀÇ »õ·Î¿î ±â´Éµé Áß »ç¿ëÀÚÀÇ Äڵ忡 Áï½Ã Àû¿ë½Ãų ¼ö ÀÖ´Â °¡Àå ½¬¿î ±â´ÉÀÌ´Ù. À̹ø Å×Å©ÆÁ¿¡¼­´Â Çâ»óµÈ ·çÇÁ¹®À¸·Î ÄÝ·º¼ÇÀÇ ¿¤¸®¸ÕÆ®¿¡ ¼øÂ÷ÀûÀ¸·Î ¾×¼¼½ºÇÏ´Â ÀÌÀü ¹æ¹ýÀ» ´ëüÇÏ´Â ¹ý¿¡ ´ëÇØ¼­ ¹è¿öº¸ÀÚ.

Çâ»óµÈ ·çÇÁ¹®Àº ¾î¶»°Ô »ý°å´Â°¡? RecentTipsÀ̶ó°í ºÒ¸®´Â TechTip ¿ÀºêÁ§Æ®µéÀÇ ÄÝ·º¼ÇÀÌ ÀÖ´Ù°í Ä¡ÀÚ. ÀÌ ÄÝ·º¼Ç¿¡ ´ÙÀ½°ú °°ÀÌ Çâ»óµÈ ·çÇÁ¹®À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

   for (TechTip tip: RecentTips)

"for each TechTip in RecentTips(RecentTips¾È¿¡ °¢°¢ÀÇ TechTip)"À̶ó°í Àд´Ù. ¿©±â¼­ ÄÝ·º¼Ç ³»ÀÇ TechTipÀÇ ÇöÀç ÀνºÅϽº¸¦ °¡¸®Å°±â À§ÇØ tip º¯¼ö°¡ »ç¿ëµÇ¾ú´Ù. "for each" ´Ü¾î ¶§¹®¿¡, Çâ»óµÈ »ý¼º¹®Àº for-each »ý¼º¹®À¸·Îµµ ºÒ¸°´Ù.

ÄÝ·º¼ÇÀ» ¹Ýº¹Çϱâ À§ÇØ »ç¿ëÇÑ ±âÁ¸ ¹æ¹ý°ú Çâ»óµÈ ·çÇÁ¹®À» ºñ±³ÇÑ´Ù¸é, for each loopÀÌ ´õ °£´ÜÇÏ°í »ç¿ëÀÚÀÇ Äڵ带 º¸´Ù Àб⠽±°Ô ¸¸µé¾îÁشٴ °ÍÀ» ½±°Ô ¾Ë ¼ö ÀÖ´Ù.

¶ÇÇÑ Çâ»óµÈ ·çÇÁ¹®Àº Á¦³Ê¸¯ ÀÛ¾÷À» °£´ÜÈ÷ ÇÒ ¼ö ÀÖ°Ô µðÀÚÀεǾú´Ù. À̹ø ÅױׯÁ¿¡¼­ Á¦³Ê¸¯¿¡ Çâ»óµÈ ·çÇÁ¹®À» »ç¿ëÇÑ µÎ°¡Áö ¿¹¸¦ º¸¿©ÁÖ°ÚÁö¸¸, À̹ø Å×Å©ÆÁ¿¡¼­ ´Ù·ç°íÀÚ ÇÏ´Â ºÎºÐÀº ¾Æ´Ï´Ù. ´ë½Å, for each loop ¸¦ »ç¿ëÇÏ¿© Äڵ忡 ÁÙ ¼ö ÀÖ´Â Á» ´õ ±âº»ÀûÀÎ º¯È­¿¡ ´ëÇØ¼­ º¸¿©ÁÖ°íÀÚ ÇÑ´Ù.

¸ÕÀú, Array ÀÇ ¿¤¸®¸ÕÆ®µéÀ» ¹Ýº¹Çϱâ À§ÇØ ·çÇÁ¹®À» ¾î¶»°Ô »ç¿ëÇϰíÀÚ ÇÏ´Â Áö »ý°¢Çغ¸ÀÚ. °£´ÜÈ÷ Çϱâ À§ÇØ, 0ºÎÅÍ 5±îÁö intÀÇ Á¦°öÀ» ³ªÅ¸³»´Â 6°³ÀÇ int·Î ÀÌ·ç¾îÁø ¹è¿­À» ·ÎµùÇÑ´Ù.

   for (int i=0; i< squares.length; i++)

ÀÌ ¶óÀÎÀº ·çÇÁ±¸¹®ÀÇ ÀüÅëÀûÀÎ »ç¿ë¹ýÀ» º¸¿©ÁØ´Ù. ÇÑ °³ ÀÌ»ó Ä«¿îÅÍÀÇ ÃʱⰪÀ» ÁöÁ¤Çϰí, ¿Ï·á »óŸ¦ ¼³Á¤ÇÏ°í ¾î¶»°Ô Ä«¿îÅͰ¡ Áõ°¡ÇÏ´ÂÁö º¸¿©ÁØ´Ù.

Here is a short program, OldForArray, that uses the for loop.

   public class OldForArray {

     public static void main(String[] args){
       int[] squares = {0,1,4,9,16,25};
       for (int i=0; i< squares.length; i++){
         System.out.printf("%d squared is %d.\n",i, squares[i]);
       }
     }
   }

OldForArray ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇÏ°í ±¸µ¿ÇÏ¸é ´ÙÀ½ÀÌ ³ªÅ¸³­´Ù.

   0 squared is 0.
   1 squared is 1.
   2 squared is 4.
   3 squared is 9.
   4 squared is 16.
   5 squared is 25.

Çâ»óµÈ ·çÇÁ¹®À» »ç¿ëÇϵµ·Ï Å×½ºÅ© ÇÁ·Î±×·¥À» º¯°æÇÏ·Á¸é, °ü·Ã º¯¼ö¿Í º¯¼öµéÀÌ ³ªÅ¸³ª´Â ÄÝ·º¼ÇÀ» ÁöÁ¤ÇÑ´Ù. ´ÙÀ½Àº Çâ»óµÈ ·çÇÁ¹®ÀÌ´Ù.

   for (int i : squares)
ÀÌ ¶óÀÎÀº "iterate on elements from the collection named squares. (squere¶ó´Â À̸§ÀÇ ÄÝ·º¼ÇÀÇ ¿¤¸®¸ÕÆ® ¹Ýº¹) "·Î ÀÐÀ» ¼ö ÀÖ´Ù.¸®¸ÕÆ®´Â int i·Î ³ªÅ¸³¯ °ÍÀÌ´Ù.

·çÇÎ Àü¿¡ ¹è¿­¿¡ ÀÖ¾î¾ßÇÒ ¿¤¸®¸ÕÆ®ÀÇ ¼ö¸¦ °áÁ¤ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ¶ÇÇÑ ÇöÀç »óÅ¿¡¼­ ¾î¶»°Ô Áõ°¡ÇÒÁöµµ ÁöÁ¤ÇÒ Çʿ䰡 ¾ø´Ù. "³»ºÎÀû" ¹è¿­¿¡ ´ëÇÑ Çâ»óµÈ ·çÇÁ¹®Àº ÀÌÀü¿¡ º¸¿©ÁØ ·çÇÁ¹®°ú µ¿ÀÏÇÏ´Ù.

Å×½ºÆ® ÇÁ·Î±×·¥ÀÎ NewForArray¿¡¼­´Â OldForArray¿¡¼­¿Í °°Àº °á°ú°¡ ³ªÅ¸³­´Ù.

    public class NewForArray {

     public static void main(String[] args) {
       int j = 0;
       int[] squares = {0, 1, 4, 9, 16, 25};
       for (int i : squares) {
         System.out.printf("%d squared is %d.\n", j++, i);
       }
     }
   }

¹è¿­Àº ¹è¿­ÀÌ ¼±¾ðµÉ ¶§ ÁöÁ¤µÇ´Â ½Ì±Û ŸÀÔ ¿¤¸®¸ÕÆ®µéÀÇ »öÀÎÈ­µÈ ÄÝ·º¼ÇÀÌ´Ù. ArrayList¿Í °°Àº Á» ´õ ÀϹÝÀûÀÎ ÄÝ·º¼Ç¿¡¼­´Â ¿¤¸®¸ÕÆ®°¡ Object·Î ÀúÀåµÈ´Ù.´ÙÀ½°ú °°ÀÌ ÄÝ·º¼ÇÀ» ¹Ýº¹ÇÏ´Â C ½ºÅ¸ÀÏ ·çÇÁ¹®À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.

   for (int i = 0; i < list.size(); i++)

±× ÈÄ llist.get(i)¸¦ »ç¿ëÇÏ¿© ÇöÀç ¿¤¸®¸ÕÆ®¸¦ ·¹ÆÛ·±½ºÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ÀÇ ÇÁ·Î±×·¥ OldForArrayList¿¡¼­´Â ArrayListÀ» ä¿ö¼­ ArrayList¿¡¼­ Àбâ À§ÇØ ¿ÀÅä¹Ú½ÌÀ» »ç¿ëÇÑ´Ù.

   import java.util.ArrayList;
   import java.util.List;

   public class OldForArrayList {
     private static List squares = new ArrayList();

     private static void fillList() {
       for (int i = 0; i < 6; i++) {
         squares.add(i * i);
       }
     }

     private static void outputList() {
       for (int i = 0; i < squares.size(); i++) {
         System.out.printf("%d squared is %d.\n",
           i, squares.get(i));
       }
     }

     public static void main(String args[]) {
       fillList();
       outputList();
     }
   }

±×·¯³ª ArrayList°¡ ÄÝ·º¼Ç ÇÁ·¹ÀÓÀÇ ÀϺÎÀ̱⠶§¹®¿¡, ´ÙÀ½ÀÇ ÆÐÅÏ¿¡¼­ Iterator¸¦ »ç¿ëÇÏ¿© À̸¦ ¹Ýº¹ÇÏ´Â °ÍÀÌ Á» ´õ ÀϹÝÀûÀÌ´Ù.

   while( iterator.hasNext()) {
     doSomethingWith (iterator.next());
   }

´ÙÀ½ÀÇ ÇÁ·Î±×·¥ IteratorForArrayList¿¡ ³ªÅ¸³­ °Íó·³ À̸¦ ·çÇÁ¹®¿¡ ¹øµéÇÒ ¼ö ÀÖ´Ù.

   import java.util.ArrayList;
   import java.util.List;
   import java.util.Iterator;

   public class IteratorForArrayList {

     private static List squares = new ArrayList();

      private static void fillList() {
       for (int i = 0; i < 6; i++) {
         squares.add(i * i);
       }
     }

     private static void outputList() {
       Iterator iterator = squares.iterator();
       int j=0;
       for (; iterator.hasNext();) {
         System.out.printf("%d squared is %d.\n",
                            j++, iterator.next());
       }
     }

     public static void main(String args[]) {
       fillList();
       outputList();
     }
   }

·çÇÁ¹®¿¡ ù¹øÂ° ȤÀº ¼¼¹øÂ° ¸Å°³º¯¼ö°¡ ¾ø´Ù´Â °ÍÀÌ Á» ÀÌ»óÇØº¸ÀÏÁö ¸ð¸¥´Ù. Ãʱ⠻óŰ¡ ¾ø°í, List¿¡¼­ÀÇ Æ÷Áö¼Ç Áõ°¡°¡ ·çÇÁ¹®ÀÇ º»¹®¿¡¼­ iterator.next()¸¦ È£ÃâÇÏ¿© ¼öÇàµÈ´Ù.

Çâ»óµÈ ·çÇÁ¹®Àº ºÒÇÊ¿äÇÑ ¹Ýº¹¹®À» ¸íÈ®ÇϰÔÇÑ´Ù. ArrayList¿¡ ´ëÇÑ Iterator ¿ÀºêÁ§Æ®¸¦ »ý¼ºÇÏ¿© ·çÇÁ¹®¿¡ ¹Ý¸ñ¹®À» »ç¿ëÇÏ´Â ´ë½Å, ´ÙÀ½À» ÀÌ¿ëÇÑ´Ù.

  for ( Integer square : squares)

ÀÌ´Â ÄÝ·º¼ÇÀÇ À̸§ÀÌ squaresÀ̰í, ÇöÀç ÂüÁ¶µÈ ¾ÆÀÌÅÛÀÌ IntegerŸÀÔÀ̸ç, º¯¼ö square·Î ÂüÁ¶µÇ°í ÀÖÀ½À» °¡¸®Å°°í ÀÖ´Ù.

ArrayListÀÇ ÄÁÅÙÃ÷°¡ Integer ŸÀÔÀÓÀ» ¾Ë ¼ö ÀÖ´Â ¹æ¹ýÀÌ ¾øÀ¸¹Ç·Î ÀÌ ÄÚµå´Â ÄÄÆÄÀϵÇÁö ¾ÊÀ» °ÍÀÌ´Ù. À̸¦ ¼öÁ¤Çϱâ À§Çؼ­, J2SE 5.0¿¡ ¼Ò°³µÈ ¶Ç´Ù¸¥ ±â´ÉÀÎ, Á¦³Ê¸¯À» »ç¿ëÇØ¾ßÇÑ´Ù. Integer ŸÀÔÀÇ ¿¤¸®¸ÕÆ®¸¸À» ÀúÀåÇÒ ¼ö ÀÖ´Â °ÍÀ¸·Î squaresÀÇ Á¤ÀÇ¿Í ¼±¾ð¹®À» Á¤ÀÇÇØÁÖ¾î¾ßÇÑ´Ù. ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù.

   private static List<Integer> squares
                               = new ArrayList<Integer>();

´ÙÀ½ÀÇ ÇÁ·Î±×·¥, NewArrayListÀº Çâ»óµÈ ·çÇÁ¹®°ú Á¦³Ê¸¯À» ÇÔ²² »ç¿ëÇÏ´Â ¹ýÀ» º¸¿©ÁØ´Ù.

   import java.util.List;
   import java.util.ArrayList;

   public class NewArrayList {
     private static List<Integer> squares
                               = new ArrayList<Integer>();

      private static void fillList() {
       for (int i = 0; i < 6; i++) {
         squares.add(i * i);
       }
     }

     private static void outputList() {
       int j=0;
       for (Integer square : squares) {
         System.out.printf("%d squared is %d.\n",
                         j++, square);
       }
     }

     public static void main(String args[]) {
       fillList();
       outputList();
     }
   }

ÀÌ NewArrayList ¿¹Á¦´Â ±Ø´ÜÀûÀ¸·Î °£´ÜÇÑ °ÍÀÌÁö¸¸, ·çÇÁ ÀϹݹ®°ú Çâ»óµÈ ·çÇÁ¹® »çÀÌÀÇ ±¸¹®Àû Â÷ÀÌÁ¡À» º¸¿©ÁÖ°í ÀÖ´Ù. ´ÙÀ½Àº ·çÇÁ¹®µé°£ÀÇ ±¸¹®Àû Â÷À̸¦ º¸¿©ÁÖ´Â ¶Ç´Ù¸¥ ¿¹Á¦ÀÌ´Ù. ÀÌ ¿¹Á¦´Â 2004³â JavaOne ÄÁÆÛ·±½º¿¡¼­ Joshua Bloch and Neil GafterÀÇ ´ãÈ­¸¦ ¹ßÃéÇÑ °ÍÀÌ´Ù. ÀÌ ¿¹Á¦¿¡¼­, ¸Þ¼Òµå´Â ÄÝ·º¼ÇÀÇ °¢ ¿¤¸®¸ÕÆ®¿¡ »ç¿ëµÈ´Ù. óÀ½ ½ÃÀÛÇÒ ¶§, ÀÌ ¿¹Á¦¿¡¼­´Â ´ÙÀ½°ú °°ÀÌ Iterator¸¦ »ç¿ëÇÑ´Ù.

   void cancelAll (Collection c) {
     for (Iterator i = c.iterator(); i.hasNext(); ) {
       TimerTask tt = (TimerTask) i.next();
       tt.cancel();
     }
   }

´ÙÀ½À¸·Î, Çâ»óµÈ ·çÇÁ¹®ÀÌ µµÀԵǾî IteratorÀÇ »ç¿ëÀ» »èÁ¦ÇÑ´Ù.

   void cancelAll( Collection c ) {
     for (Object o : c)
       ( (TimerTask) o). cancel();
   }

ÄÝ·º¼ÇÀÇ ¿¤¸®¸ÕÆ®¸¦ Object ŸÀÔÀ¸·Î Ãë±ÞÇØ¼­ TimerTask ŸÀÔÀ¸·Î ij½ºÆÃµÈ´Ù´Â ¹®Á¦°¡ ³²¾ÆÀÖ´Ù. ÀÌ ¹®Á¦´Â ´ÙÀ½°ú °°ÀÌ Á¦³Ê¸¯À» µµÀÔÇϸé ÇØ°áµÈ´Ù.

   void cancelAll( Collection c ) {
     for (TimerTask task : c)
       task.cancel();
   } 

Çâ»óµÈ ·çÇÁ¹®ÀÌ ¸ðµç °÷¿¡ »ç¿ëµÉ ¼ö´Â ¾ø´Ù´Â °ÍÀ» ¾Ë¾ÆµÎ±æ ¹Ù¶õ´Ù. ´ÙÀ½°ú °°Àº »óȲ¿¡¼­´Â »ç¿ëÇÒ ¼ö ¾ø´Ù.

  • ÄÝ·º¼ÇÀ» ¼øÈ¸Çϸ鼭 ¿¤¸®¸ÕÆ®¸¦ »èÁ¦ÇÒ ¶§
  • ¹è¿­À̳ª ¸®½ºÆ®¿¡¼­ ÇöÀç ½½·ÔÀ» ¼öÁ¤ÇÒ ¶§
  • ´ÙÁß ÄÝ·º¼ÇÀ̳ª ¹è¿­À» ¹Ýº¹ÇÒ ¶§

±×·¯³ª, À§ÀÇ °æ¿ìµéÀ» Á¦¿ÜÇϰí´Â Çâ»óµÈ ·çÇÁ¹®ÀÇ »ç¿ëÇÏ¿© Äڵ带 Á» ´õ °£´ÜÈ÷ Çϱ⠹ٶõ´Ù.

»õ·Î¿î °ÍµéÀÌ ¾ðÁ¦³ª ±×·¸µíÀÌ, Çâ»óµÈ ·çÇÁ¹®Àº Á¶±Ý ³¸¼³°í ÀÐ±â ¾î·Æ°Ô ´À²¸Áú ¼öµµ ÀÖ´Ù. ÀÌÀü¿¡´Â ¿À·§µ¿¾È ·çÇÁ¹®¿¡ C ½ºÅ¸ÀÏÀ» »ç¿ëÇßÀ» °ÍÀÌ´Ù. ±×·¯³ª, Ä«¿îÅÍ º¯¼ö³ª Iterator¸¦ °®Áö ¾Ê´Â °ÍÀÌ ´õ Àб⠽±´Ù. ¶ÇÇÑ Ãʱ⠰ª°ú ·çÇÁ Á¾·á »óŸ¦ ¼³Á¤Çϴµ¥ ÀÖ¾î »ç¿ëÀÚÀÇ ÄÝ·º¼ÇÀÌ ¾îµð¿¡¼­ ½ÃÀÛÇÏ°í ³¡³ª´ÂÁö °ÆÁ¤ÇÒ Çʿ䰡 ¾ø´Ù.

Çâ»óµÈ ·çÇÁ¹®¿¡ ´ëÇÑ Á» ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â The For-Each Loop¸¦ Âü°íÇϱ⠹ٶõ´Ù..

.
.
.

Reader Feedback

  ¸Å¿ì ÁÁ´Ù    ÁÁ´Ù    ±×Àú ±×·¸´Ù 

 

ÀÚ¹Ù ÇÁ·Î±×·¡¹ÖÀÌ ±Ã±ÝÇϼ¼¿ä? Java Online SupportÀ» Âü°íÇϼ¼¿ä.

.
.

º» ¸ÞÀÏÀº ¼ö½ÅÀ» µ¿ÀÇÇÑ È¸¿ø´Ô¿¡°Ô¸¸ ¹ß¼ÛµË´Ï´Ù.
º» ¸ÞÀÏÀÇ ¼ö½ÅÀ» °ÅºÎÇϰųª ¼ö½ÅÁÖ¼Ò¸¦ º¯°æÇÏ·Á¸é SKDN@Sun.comÀ¸·Î ¹®ÀÇ Áֽñ⠹ٶø´Ï´Ù.

SKDN(Sun Korea Developers Network)¿¡¼­ J2EE/J2SE Å×Å©ÆÁ µî ´Ù¾çÇÑ ¾ÆÆ¼Å¬µéÀ» Âü°íÇϼ¼¿ä.

Copyright 2003-2005 Sun Korea, Inc. All rights reserved.


Sun Microsystems, Inc.
.
.