|
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 Áö¿ø±â´É¿¡¼ ¿ÏÀüÈ÷ ³ªÅ¸³»Áö ¸øÇÏ´Â ÃֽŠǥÁØ ÆäÀÌÁöµéÀÌ ¸¹´Ù´Â °Í ¶ÇÇÑ ¾Ë ¼ö
ÀÖÀ» °ÍÀÌ´Ù.
±×·¯³ª ¿Ïº®ÇÑ À¥ºê¶ó¿ìÀú°¡ ¼³Ä¡µÈ´ÙÇÏ´õ¶óµµ 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ÀÇ Ã³À½ ÆäÀÌÁö¸¦ ·ÎµùÇÑ´Ù.
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();
}
});
}
}
ºñ·Ï ÄÚµå´Â óÀ½ ¹öÀü°ú ºñ½ÁÇÏ°Ô º¸À̰ÚÁö¸¸, °á°ú·Î´Â ¿ÏÀüÈ÷ Ç¥ÇöµÈ À¥ÆäÀÌÁö·Î ³ªÅ¸³´Ù.
ÅØ½ºÆ® Çʵå¿Í ¹öưÀ» ÀÌ ¹öÀüÀ̳ª ù¹øÂ° ¹öÀü¿¡ Ãß°¡ÇÒ ¼ö ÀÖ´Ù. À̸¦ ÅëÇØ »ç¿ëÀÚ´Â ´Ù¸¥ ÆäÀÌÁöÀÇ 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¸¦ Âü°íÇϱ⠹ٶõ´Ù..
º» ¸ÞÀÏÀº ¼ö½ÅÀ» µ¿ÀÇÇÑ È¸¿ø´Ô¿¡°Ô¸¸ ¹ß¼ÛµË´Ï´Ù.
º» ¸ÞÀÏÀÇ ¼ö½ÅÀ» °ÅºÎÇϰųª ¼ö½ÅÁÖ¼Ò¸¦ º¯°æÇÏ·Á¸é SKDN@Sun.comÀ¸·Î
¹®ÀÇ Áֽñ⠹ٶø´Ï´Ù.
SKDN(Sun Korea
Developers Network)¿¡¼ J2EE/J2SE Å×Å©ÆÁ µî ´Ù¾çÇÑ ¾ÆÆ¼Å¬µéÀ»
Âü°íÇϼ¼¿ä.
Copyright 2003-2005 Sun Korea, Inc. All rights reserved.
|