Core Java Technologies Tech Tip¿¡ ¿À½Å ¿©·¯ºÐÀ» ȯ¿µÇÕ´Ï´Ù
Core Java Technologies
TECHNICAL TIPS
2005³â 11¿ù 15ÀÏÀÚ
  À̹ø È£¿¡¼­´Â,

» °¡º¯ arity ¸Þ¼Òµå
» RESOURCEBUNDLE.CONTROLÀ» ÀÌ¿ëÇÑ ¸®¼Ò½º ¹øµé ·Îµù Ä¿½ºÅ͸¶ÀÌÁî
» Áö³­ ´Þ ÆÁ ¡°COOKIEHANDLER¸¦ ÀÌ¿ëÇÑ ÄíŰ °ü¸®¡±¿¡ ´ëÇÑ ¾÷µ¥ÀÌÆ®

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



°¡º¯ arity ¸Þ¼Òµå
 

¶§·Î´Â varags ¸Þ¼Òµå¶ó°íµµ ºÒ¸®´Â °¡º¯ arity ¸Þ¼Òµå´Â ÀÓÀÇÀÇ ÀÎÀÚ(argument) ¼¼Æ®¸¦ ¹Þ´Â´Ù. JDK 5.0 ÀÌÀü¿¡´Â ÀÓÀÇÀÇ ÀÎÀÚ ¼¼Æ®¸¦ ¸Þ¼Òµå¿¡ ÆÐ½ºÇÏ·Á¸é ¿ÀºêÁ§Æ®ÀÇ array¸¦ ÆÐ½ºÇØ¾ß Çß´Ù. °Ô´Ù°¡, MessageFormat Ŭ·¡½ºÀÇ format ¶Ç´Â JDK 5.0¿¡ »õ·Î µµÀÔµÈ PrintStreamÀÇ printf method¿Í °°Àº ¸Þ¼Òµå°¡ Æ÷ÇÔµÈ °¡º¯ ÀÎÀÚ ¸®½ºÆ®¸¦ ÀÌ¿ëÇÏ¿© Á¸ÀçÇÏ´Â °¢ Æ÷¸ÅÆÃ ½ºÆ®¸µ¿¡ ´ëÇØ ÀÎÀÚ¸¦ Ãß°¡ÇÒ ¼ö ¾ø¾ú´Ù. °¡º¯ ÀÎÀÚ ¸®½ºÆ®¸¦ ÀÌ¿ëÇÏ´Â ÀÌÀüÀÇ ¹æ½ÄÀº 2002³â 2¿ù 4ÀÏÀÚ ÆÁ Using Variable Argument Lists(¿µ¹®)¿¡ ¼³¸íµÇ¾î ÀÖ´Ù.

JDK 5.0Àº ÈξÀ ´õ À¯¿¬ÇÑ varags ±â´ÉÀ» Ãß°¡ÇÑ´Ù. ±×·¯¸é, varags ±â´É¿¡ ´ëÇØ ¾Ë¾Æº¸±â À§ÇØ PrintStream Ŭ·¡½º ³» printf ¸Þ¼ÒµåÀÇ JDK 5.0 ¹öÀüÀ» »ìÆìº¸±â·Î ÇÏÀÚ.

   public PrintStream printf(String format,
                             Object... args)

ÀÌ ¸Þ¼Òµå´Â 2004³â 10¿ùÀÇ Å×Å© ÆÁ Formatting Output With the New Formatter(¿µ¹®) ¿¡ ¼³¸íµÇ¾î ÀÖ´Ù.

º»ÁúÀûÀ¸·Î ù ¹øÂ° ÀÎÀÚ´Â ÈÄ¼Ó ÀÎÀÚ¸¦ place holders¿¡ ±âÀÔÇÑ ½ºÆ®¸µÀ̰í, µÎ ¹øÂ° ÀÎÀÚ¿¡ ÀÖ´Â ¼¼ °³ÀÇ Á¡Àº ¸¶Áö¸· ÀÎÀÚ°¡ ÀÎÀÚÀÇ array ¶Ç´Â sequence·Î ÆÐ½ºµÉ ¼ö ÀÖÀ½À» ³ªÅ¸³½´Ù. ¼¼ °³ÀÇ Á¡Àº C ¹× C++ ÇÁ·Î±×·¥¿¡¼­ °¡º¯ ÀÎÀÚ°¡ ÁöÁ¤µÇ´Â ¹æ½Ä°ú À¯»çÇÏ´Ù´Â Á¡¿¡ À¯ÀÇÇϵµ·Ï ÇÑ´Ù.

Æ÷¸ÅÆÃ ½ºÆ®¸µ ³»ÀÇ place holdersÀÇ ¼ö´Â ¾ó¸¶³ª ¸¹Àº ÀÎÀÚ°¡ ÇÊ¿äÇÑÁö¸¦ °áÁ¤Çϴµ¥, ¿¹¸¦ µé¾î Æ÷¸ÅÆÃ ½ºÆ®¸µ "Hello, %1s\nToday is %2$tB %2$te, %2$tY"ÀÇ °æ¿ì¿¡´Â ŸÀÔ ½ºÆ®¸µÀÇ Ã¹ ¹øÂ° ÀÎÀÚ¿Í Å¸ÀÔ ³¯Â¥ÀÇ µÎ ¹øÂ° ÀÎÀÚ µî 2°³ÀÇ ÀÎÀÚ¸¦ Á¦°øÇÑ´Ù. ´ÙÀ½Àº ÀÌ¿¡ ´ëÇÑ ¿¹Á¦ÀÌ´Ù.

   import java.util.*;

   public class Today {
     public static void main(String args[]) {
       System.out.printf(
         "Hello, %1s%nToday is %2$tB %2$te, %2$tY%n",
         args[0], new Date());
     }
   }

À̸§¿¡ ´ëÇÑ ÀÎÀÚ¸¦ ÆÐ½ºÇÒ °æ¿ì, °á°ú´Â ´ÙÀ½°ú °°À» °ÍÀÌ´Ù.

   > java Today Ed
   Hello, Ed
   Today is October 18, 2005

autoboxing°ú unboxingÀº (¾Æ·¡ÀÇ printf ¸Þ¼Òµå¿Í °°ÀÌ) ±âº» ŸÀÔ(primitive type) ÀÎÀÚ¸¦ Á¦°øÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù.

   System.out.printf("Pi is approximately  %f", Math.PI, %n);

¿©±â¼­ Math.PI´Â double ŸÀÔÀ̰í, autoboxingÀº À̸¦ Double ŸÀÔÀÇ ¿ÀºêÁ§Æ®·Î ÀüȯÇÑ´Ù. (autoboxing¿¡ °üÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀ» º¸·Á¸é 2005³â 5¿ù 31ÀÏÀÚ ÆÁ Autoboxing ¼Ò°³ ³»¿ëÀ» ÂüÁ¶ÇÒ °Í.)

°¡º¯ ÀÎÀÚ ¸®½ºÆ®¸¦ ¹Þ±â À§ÇØ ÀÚü ¸Þ¼Òµå¸¦ »ý¼ºÇÒ °æ¿ì, ¸Þ¼ÒµåÀÇ ¸¶Áö¸· ÀÎÀÚ¸¸ÀÌ °¡º¯ ¸®½ºÆ®¸¦ ¹Þ´Â °ÍÀ¸·Î ¼±¾ðµÉ ¼ö ÀÖ´Ù. °¡º¯ ±æÀÌ ÀÎÀÚ¸¦ ¸ÕÀú putÇÒ ¼ö´Â ¾ø´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ ¸Þ¼Òµå ¼±¾ðÀº À¯È¿Çϸç, °¡º¯ ¼öÀÇ String ÀÎÀÚ¸¦ ¹Þ´Â ÇϳªÀÇ ¸Å°³º¯¼ö¸¦ °¡Áö´Â ¸Þ¼Òµå¸¦ Á¤ÀÇÇÑ´Ù.

  private static void method1(String... args)

°¡º¯ ÀÎÀÚ ¸Å°³º¯¼ö°¡ À¯ÀÏÇÑ ÀÎÀÚÀÏ ÇÊ¿ä´Â ¾ø´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½ ¸Þ¼Òµå´Â ÀÓÀÇÀÇ ¼öÀÇ ÀÎÀÚ°¡ µû¸£´Â ÇϳªÀÇ Á¤¼ö ÀÎÀÚ¸¦ ÃëÇÑ´Ù.

  private static void method2(int arg, Object... args) {

À§¿¡ Ç¥½ÃÇÑ 2°³ÀÇ Æ÷¸ËÀ» °¡Áö´Â ¸Þ¼Òµå¸¦ ¿¹Á¦ Ŭ·¡½º¿¡ putÇÏ¸é ´Ù¾çÇÑ ¼öÀÇ ÀÎÀÚ¸¦ °¡Áö´Â ¸Þ¼Òµå¸¦ È£ÃâÇÒ ¼ö ÀÖ´Ù.

      method1("Hello", "World");
      method1(args);
      method2(12, 'a', "Hello", Math.PI, 1/3.0);
      method2(18, 94.0);      

À§¿¡¼­ µÎ¹øÂ° È£ÃâÀº ´Ù¸¥ °Íµé°ú´Â ¾à°£ ´Ù¸£°Ô main() ¸Þ¼Òµå·Î µé¾î¿À´Â SString[] ÀÎÀÚ¸¦ ÃëÇÏ°Ô µÈ´Ù. varags ÆÛ½Ç¸®Æ¼´Â array¸¦ »ý¼º/ÆÐ½ºÇϱâ À§ÇÑ Àý´ë ±¸¹®(implicit syntax)¿¡ ºÒ°úÇϱ⠶§¹®¿¡, array¸¦ Á÷Á¢ ÆÐ½ºÇÒ ¼ö ÀÖ´Ù. ÀÌ °æ¿ì, ÄÄÆÄÀÏ·¯´Â array¸¦ ¼öÁ¤ÇÏÁö ¾ÊÀº ä ±×´ë·Î ÆÐ½ºÇÏ°Ô µÈ´Ù.

´ÙÀ½Àº µÎ Á¾·ùÀÇ ¸Þ¼Òµå¸¦ Æ÷ÇÔÇϰí ÀÖ´Â ¿¹Á¦ Ŭ·¡½º MyArgsÀÌ´Ù.

    import java.util.*;
    public class MyArgs {
      public static void main(String args[]) {
        method1("Hello", "World");
        method1(args);
        method2(12, 'a', "Hello", Math.PI, 1/3.0);
        method2(18, 94.0);
      }
      private static void method1(String... args) {
        System.out.println(Arrays.asList(args) +
          " // " + args.length);
      }
      private static void method2(int arg, Object... args) {
        System.out.println(Arrays.asList(args) + " / " + arg);
      }
    }

´ÙÀ½Àº MyArgsÀÇ ½ÇÇà ¿¹Á¦ÀÌ´Ù.

    > java MyArgs x y z
   [Hello, World] // 2
   [x, y, z] // 3
   [a, Hello, 3.141592653589793, 0.3333333333333333] / 12
   [94.0] / 18

MyArgs´Â Arrays.asList() ¸Þ¼Òµå¿¡ ÆÐ½ºÇÔÀ¸·Î½á °¡º¯ ÀÎÀÚ¿¡ ¾×¼¼½ºÇÑ´Ù. ´Ù½Ã ¸»Çؼ­, ÀÎÀÚ´Â ¸¶Ä¡ arrayó·³ ¾×¼¼½ºµÇ´Âµ¥, ÀϹÝÀûÀ¸·Î enhanced for loop¿¡¼­´Â ¾Æ·¡¿Í À¯»çÇÑ ÇüÅ·ΠÁøÇàµÉ °ÍÀÌ´Ù.

  for (String arg: args) {
    ...
  }

À̷νá Çѹø¿¡ ÇϳªÀÇ ¿¤¸®¸ÕÆ®¸¦ ó¸®ÇÒ ¼ö ÀÖ°Ô µÈ´Ù.

º¸´Ù½ÃÇÇ varargs ±â´ÉÀº º°´Ù¸¥ ÇÁ·Î±×·¡¹Ö ¾øÀÌ °¡º¯ ¼öÀÇ ÀÎÀÚ¸¦ ¹Þ´Â ¸Þ¼Òµå¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. varargs¿¡ °üÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº Varargs(¿µ¹®)¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù.

Back to Top

RESOURCEBUNDLE.CONTROLÀ» ÀÌ¿ëÇÑ ¸®¼Ò½º ¹øµé ·Îµù Ä¿½ºÅ͸¶ÀÌÁî
 

2005³â 8¿ù 17ÀÏÀÚ Å×Å© ÆÁ J2SE 5.0 ±× ÀÌÈÄ¿Í Mustang¿¡ ±â¿©Çϱ⿡¼­ ¿ì¸®´Â Java SE 6À» ½ÃÀÛÇÏ´Â ¹æ¹ýÀ» ¹è¿î ¹Ù ÀÖ´Ù. Ç÷§ÆûÀº ¾ÆÁ÷ ÇÁ¸® º£Å¸ ¹öÀüÀÌÁö¸¸ ¹Ì¸® ¹æÇâÀ» »ìÆìº¸°í ¸î °¡Áö ±â´ÉÀ» ½ÃÇèÇØ º¸±â¿¡´Â ÃæºÐÇϸç, »õ·Î¿î ±â´ÉÀº ¸®¼Ò½º ¹øµéÀÇ »ç¿ëÀ» º¸´Ù È¿°úÀûÀ¸·Î Á¦¾îÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù.

¸®¼Ò½º ¹øµéÀº ¾ÖÇø®ÄÉÀ̼ÇÀÇ ·ÎÄöóÀÌÁ¦À̼ǿ¡ »ç¿ëµÈ´Ù. ±× »ç¿ë¹ýÀº 2005³â 1¿ù 19ÀÏÀÚ Å×Å©ÆÁ ¸®¼Ò½º ¹øµé ·Îµù¿¡ ¼Ò°³µÇ¾î ÀÖ´Ù. ±âº»ÀûÀ¸·Î, ¸®¼Ò½º ¹øµéÀº ¸®¼Ò½º¸¦ ·ÎÄöóÀÌÁîÇϱâ À§ÇÑ ´Ù¾çÇÑ ½ºÆ®¸µÀ» ¸ÅÇÎÇÏ¿© ÅØ½ºÆ® ½ºÆ®¸µÀ̳ª ¾ÆÀÌÄÜÀÌ ´Ù¾çÇÑ ¾ð¾î·Î ÇØ¼®µÇ´Â À̹ÌÁö¿Í Æ®·£Àè¼ÇÀ» Ç¥½ÃÇÒ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù.

¸®¼Ò½º ¹øµéÀÇ »ç¿ëÀº java.util package ÆÐŰÁö¿¡ ÀÖ´Â ResourceBundle Ŭ·¡½º¿¡ ÀÇÇØ °ü¸®µÇ¸ç, ¸®¼Ò½º ¹øµé·Î ÀÛ¾÷ÇÒ °æ¿ìÀÇ ±âº» ÇÁ·Î¼¼½º´Â ´ÙÀ½ ÇÁ·Î±×·¥¿¡¼­ º¸´Â °Íó·³ ResourceBundleÀÇ getBundle() ¸Þ¼Òµå¸¦ ÅëÇØ ¹øµéÀ» ¾ò´Â °ÍÀÌ´Ù.

   import java.util.*;

   public class Test1 {
     public static void main(String args[]) {
       Locale locale = Locale.ENGLISH;
       ResourceBundle myResources =
         ResourceBundle.getBundle("MyResources", locale);
       String string = myResources.getString("HelpKey");
       System.out.println("HelpKey: " + string);
     }
   }

Test1 ÇÁ·Î±×·¥Àº MyResources¶ó ºÒ¸®´Â ¹øµéÀ» ¾ò´Â´Ù. ±×·± ´ÙÀ½, ¹øµé·ÎºÎÅÍ HelpKey¶ó´Â À̸§ÀÇ ¸®¼Ò½º¸¦ ¾ò¾î¼­ ¸®¼Ò½ºÀÇ °ªÀ» ÇÁ¸°Æ®ÇÑ´Ù.

MyResources´Â ´ÙÀ½ÀÇ Å¬·¡½º ÆÄÀÏÀÏ ¼öµµ ÀÖ°í,

   import java.util.*;
   
      public class MyResources extends ListResourceBundle {
        public Object[][] getContents() {
          return new Object[][] {
            {"OkKey", "OK"},
            {"CancelKey", "Cancel"},
            {"HelpKey", "Help"},
            {"YesKey", "Yes"},
            {"NoKey", "No"},
          };
        }
   } 

¶Ç´Â ´ÙÀ½°ú °°Àº Ű °ªÀÇ ½ÖÀ» °¡Áö´Â MyResources.properties¶ó´Â À̸§ÀÇ ÆÄÀÏÀÏ ¼öµµ ÀÖ´Ù.

   OkKey=OK
   CancelKey=Cancel
   HelpKey=Help
   YesKey=Yes
   NoKey=No

±×·¯³ª, ¸®¼Ò½º ¹øµéÀ» XML ÆÄÀÏ·Î ¸¸µé·Á¸é ¾î¶»°Ô ÇØ¾ß ÇÒ±î? ¿ì¼±, java.util.Properties Ŭ·¡½º´Â ÆÄÀÏÀ» ·ÎµåÇÏ´Â µÎ °¡Áö ¹æ¹ýÀ» Á¦°øÇÑ´Ù. ù ¹øÂ° ¹æ¹ýÀº load() ¸Þ¼Òµå¸¦ ÅëÇØ key=value ŸÀÔ ÆÄÀÏÀ» ÀÐ¾î µéÀÌ´Â °ÍÀ̰í, µÎ ¹øÂ° ¹æ¹ýÀº loadFromXML() ¸Þ¼Òµå¸¦ ÅëÇØ XML ÆÄÀÏÀÇ ¼Ó¼ºÀ» ·ÎµåÇÏ´Â °ÍÀÌ´Ù. ControlÀ̶ó´Â À̸§ÀÇ Mustang ³»ÀÇ ResourceBundleÀÇ »õ·Î¿î ÀÌ³Ê Å¬·¡½º(inner class) ´öºÐ¿¡ ¸®¼Ò½º ¹øµéÀ» XML ÆÄÀÏ·Î ÀúÀåÇÒ ¼ö ÀÖ´Ù.

ÀÌ ½ÃÁ¡¿¡¼­ »ç¿ëÀÚ´Â Mustang project home page(¿µ¹®)¿¡¼­ Á¦°øÇÏ´Â ÃÖ½ÅÀÇ Mustang ½º³À¼¦ ¸±¸®Á ¼³Ä¡ÇÏ°í ½ÍÀ» ¼öµµ ÀÖ°Ú´Ù.

ResourceBundle.Control Ŭ·¡½º´Â ResourceBundle.getBundle()ÀÌ ¹øµéÀ» °Ë»öÇÏ°í ·ÎµåÇÒ ¶§ È£ÃâµÇ´Â ÀÏ·ÃÀÇ callback ¸Þ¼Òµå¸¦ Á¦°øÇÑ´Ù. ¿©·¯ºÐÀº ÀÚü Control Ŭ·¡½º¸¦ Á¦°øÇÔÀ¸·Î½á ±âº»°ª ·Îµù ¹× ij½Ì µ¿ÀÛÀ» ¿À¹ö¶óÀ̵åÇÒ ¼ö ÀÖ´Ù.

±×·¯ÇÑ Ä¿½ºÅÒ Control Ŭ·¡½º¸¦ ±¸ÇöÇϱâ À§Çؼ­´Â getFormats()¿Í newBundle() ¸Þ¼Òµå¸¦ ¿À¹ö¶óÀ̵åÇϱ⸸ ÇÏ¸é µÈ´Ù. getFormats() ¸Þ¼Òµå´Â ¿©·¯ºÐÀÌ XMLÀ» Æ÷¸ËÀ¸·Î Áö¿øÇÑ´Ù´Â »ç½ÇÀ» ¾Ë·ÁÁÙ °ÍÀ̰í, ±×·¯¸é newBundle()Àº ÇØ´ç ¹øµéÀ» ã°Ô µÈ´Ù. ±âº» Control Ŭ·¡½º ³»¿¡´Â ±âº» ¹øµé À̸§À» ½ÇÁ¦ ¸®¼Ò½º À̸§À¸·Î ÀüȯÇϱâ À§ÇÑ º¸Á¶ ¸Þ¼Òµå°¡ ÀÖ´Ù.

Ä¿½ºÅÒ ResourceBundle.Control ±¸Çö°ú ÇÔ²² XMLResourceBundleÀ̶ó ºÒ¸®´Â ResourceBundleÀÇ ¼­ºêŬ·¡½º°¡ Æ÷ÇԵǾî ÀÖ´Ù. ÀÌ ¼­ºêŬ·¡½º´Â XML ÆÄÀÏÀ» ·ÎµåÇϰí À̸¦ ResourceBundle·Î ó¸®ÇÏ´Â µ¥ »ç¿ëµÈ´Ù.

´ÙÀ½Àº Control Ŭ·¡½º¿Í ResourceBundle¿¡ ´ëÇÑ Àüü Ŭ·¡½º Á¤ÀǽÄÀÌ´Ù.

   import java.io.*;
   import java.net.*;
   import java.util.*;

   public class XMLResourceBundleControl extends 
      ResourceBundle.Control {
     private static String XML = "xml";

     public List getFormats(String baseName) {
         return Collections.singletonList(XML);
     }

     public ResourceBundle newBundle(String baseName, 
         Locale locale, String format, ClassLoader loader, 
         boolean reload)
             throws IllegalAccessException, 
                 InstantiationException, IOException {
       if ((baseName == null) || (locale == null) ||
           (format == null) || (loader == null)) {
         throw new NullPointerException();
       }
       ResourceBundle bundle = null;
       if (format.equals(XML)) {
         String bundleName = toBundleName(baseName, locale);
         String resourceName = 
            toResourceName(bundleName, format);
         URL url = loader.getResource(resourceName);
         if (url != null) {
           URLConnection connection = url.openConnection();
           if (connection != null) {
             if (reload) {
               connection.setUseCaches(false);
             }
             InputStream stream = connection.getInputStream();
             if (stream != null) {
               BufferedInputStream bis = 
                  new BufferedInputStream(stream);
               bundle = new XMLResourceBundle(bis);
               bis.close();
             }
           }
         }
       }
       return bundle;
     }
     private static class XMLResourceBundle extends 
        ResourceBundle {
       private Properties props;

        XMLResourceBundle(InputStream stream) throws IOException {
         props = new Properties();
         props.loadFromXML(stream);
       }
       protected Object handleGetObject(String key) {
         return props.getProperty(key);
       }
       public Enumeration getKeys() {
         Set handleKeys = props.stringPropertyNames();
         return Collections.enumeration(handleKeys);
       }
     }

     public static void main(String args[]) {
       ResourceBundle bundle = ResourceBundle.getBundle("Test2",
         new XMLResourceBundleControl());
        String string = bundle.getString("HelpKey");
       System.out.println("HelpKey: " + string);
    }
  }

Ä¿½ºÅÒ Control Ŭ·¡½º¿¡´Â 3ÇàÀÇ Å×½ºÆ® ÇÁ·Î±×·¥ÀÌ Æ÷ÇԵǾî ÀÖ´Ù.

      ResourceBundle bundle = ResourceBundle.getBundle("Test2",
        new XMLResourceBundleControl());
       String string = bundle.getString("HelpKey");
       System.out.println("HelpKey: " + string);

¿©±â¼­ Áß¿äÇÑ ÇàÀÌ ¹Ù·Î ù ¹øÂ° ÇàÀε¥, ¹Ýµå½Ã Ä¿½ºÅÒ controlÀ» getBundle() ¸Þ¼Òµå¿¡ ÆÐ½ºÇØ¾ß ÇÑ´Ù. ±×·± ´ÙÀ½, ´Ù¸¥ ¹øµé°ú µ¿ÀÏÇÑ ¹æ½ÄÀ¸·Î ¹øµéÀ» »ç¿ëÇÏ¸é µÈ´Ù.

´ÙÀ½Àº Test2.xmlÀ̶ó´Â À̸§ÀÇ XML ¸®¼Ò½º ¹øµé ÆÄÀÏÀÇ ÇüÅÂÀÌ´Ù.

<?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
   <properties>
     <entry key="OkKey">OK</entry>
     <entry key="CancelKey">Cancel</entry>
     <entry key="HelpKey">Help</entry>
     <entry key="YesKey">Yes</entry>
     <entry key="NoKey">No</entry>
   </properties>
   

XMLResourceBundleControl ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¸é ´ÙÀ½°ú °°Àº °á°ú¹°ÀÌ »êÃâµÈ´Ù.

   > java XMLResourceBundleControl

     HelpKey: Help

getTimeToLive() ¹× needsReload() ¸Þ¼Òµå´Â »ó±â ResourceBundle.ControlÀÇ ±¸Çö¿¡ Ç¥½ÃµÇ¾î ÀÖÁö ¾Ê´Ù.

    public long getTimeToLive(String baseName,
                              Locale locale)

    public boolean needsReload(String baseName,
                               Locale locale,
                               String format,
                               ClassLoader loader,
                               ResourceBundle bundle,
                               long loadTime)

getTimeToLive() ¸Þ¼Òµå´Â ResourceBundle.Control ¾Æ·¡¿¡ ·ÎµåµÈ ¸®¼Ò½º ¹øµé¿¡ ´ëÇØ ¡®time-to-live¡¯ °ªÀ» ¹ÝȯÇϰí, ¸®¼Ò½º ¹øµéÀº ´ÙÀ½¿¡ »ç¿ëÇÒ ¶§ ¼º´ÉÀ» ³ôÀ̱â À§ÇØ Ä³½Ã¿¡ º¸°üµÈ´Ù. ÀÌ´Â µ¿ÀÏ Å¬·¡½º ·Î´õ¿¡¼­ ¹øµéÀ» ·ÎµåÇϱâ À§ÇÑ µÎ ¹øÂ° È£ÃâÀÌ ÀÌ¹Ì ·ÎµåµÇ°í ij½ÃµÈ ¹øµéÀ» ¹ß°ßÇÏ°Ô µÈ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¾çÀÇ time-to-live °ªÀº ¹øµéÀÌ Àç°ËÁõ(revalidate) ¾øÀÌ Ä³½Ã¿¡ ¸Ó¹«¸¦ ¼ö ÀÖ´Â ¹Ð¸®ÃÊÀÇ ¼ö¸¦ ÁöÁ¤ÇÑ´Ù. getTimeToLive()ÀÇ ±âº» ¹Ýȯ °ªÀº TTL_NO_EXPIRATION_CONTROLÀ¸·Î, ÀÌ´Â expiration controlÀ» µð½º¿¡À̺í ÇÑ´Ù. ¹øµéÀÌ Ä³½ÃµÇ´Â °ÍÀ» ¿øÄ¡ ¾ÊÀ» °æ¿ì¿¡´Â getTimeToLive()°¡ ResourceBundle.Control.TTL_DONT_CACHE¸¦ ¹ÝȯÇϵµ·Ï ÇÑ´Ù. 0ÀÌ ¹ÝȯµÉ °æ¿ì ¹øµéÀº ij½ÃµÇÁö¸¸ getBundle()ÀÌ È£ÃâµÉ ¶§¸¶´Ù ¹øµéÀÌ ¸¶Áö¸· È£Ãâ·ÎºÎÅÍ Àç°ËÁõµÈ´Ù. ij½Ã¸¦ ¼Ò°ÅÇÏ·Á¸é ResourceBundleÀÇ Á¤Àû(static) clearCache() ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù. ƯÁ¤ Ŭ·¡½º ·Î´õ¸¦ ÅëÇØ ·ÎµåµÈ ¹øµéÀ» ¼Ò°ÅÇÏ·Á¸é ¿É¼Ç ClassLoader ÀÎÀÚ¸¦ »ç¿ëÇϰí, ÁöÁ¤µÇÁö ¾ÊÀº °æ¿ì¿¡´Â È£ÃâÀÚÀÇ Å¬·¡½º ·Î´õ¸¦ »ç¿ëÇÏ¸é µÈ´Ù.

needsReload() ¸Þ¼Òµå´Â ij½Ã ³»ÀÇ ¸¸·áµÈ ¹øµéÀ» Àç·ÎµåÇÒ Çʿ䰡 ÀÖ´ÂÁö ¿©ºÎ¸¦ °áÁ¤ÇÑ´Ù. trueÀÇ ¹Ýȯ °ªÀº ¹øµéÀ» Àç·ÎµåÇÒ Çʿ䰡 ÀÖÀ½À», false´Â Çʿ䰡 ¾øÀ½À» ÀǹÌÇÑ´Ù. ¶ÇÇÑ, Control Ŭ·¡½º°¡ needsReload() ¸Þ¼Òµå¸¦ ¿À¹ö¶óÀ̵åÇϵµ·Ï ÇÏ¿© ¸®¼Ò½º ¹øµéÀ» Àç·ÎµåÇÒ Çʿ䰡 ÀÖ´ÂÁö ¿©ºÎ¸¦ Á¦¾îÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î, ¹øµéÀ» Ç×»ó Àç·ÎµåÇϱ⸦ ¿øÇÑ´Ù¸é needsReload() ¸Þ¼Òµå°¡ Ç×»ó true¸¦ ¹ÝȯÇϵµ·Ï ÇÑ´Ù. needsReload()°¡ Ç×»ó true¸¦ ¹ÝȯÇÒ °æ¿ì¿¡´Â ¹Ýµå½Ã getTimeToLive() ¸Þ¼Òµå°¡ 0À» ¹ÝȯÇϵµ·Ï ÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾ÊÀ» °æ¿ì µ¥ÀÌÅͰ¡ ÇÊ¿ä ÀÌ»óÀ¸·Î ¿À·§µ¿¾È ij½ÃµÇ´Â Çö»óÀÌ ¹ß»ýÇÏ°Ô µÈ´Ù.

¸®¼Ò½º ¹øµé¿¡¼­ °­È­µÈ ±â´É°ú Mustang ³»ÀÇ ±âŸ ±¹Á¦È­(internationalization) ±â´É¿¡ °üÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº ½ã ¼ÒÇÁÆ®¿þ¾î ¾ÆÅ°ÅØÆ® John O¡¯ConnerÀÇ ºí·Î±× Overview of Mustang's internationalization features(¿µ¹®)¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù.



Back to Top

Áö³­ ´Þ Å×Å©ÆÁ CookieHandler¸¦ ÀÌ¿ëÇÑ Cookie °ü¸®¿¡ ´ëÇÑ ¾÷µ¥ÀÌÆ®
 

Áö³­ ´Þ Å×Å©ÆÁ CookieHandler¸¦ ÀÌ¿ëÇÑ Cookie °ü¸®¿¡ Cookie Ŭ·¡½º¿¡ ¸¸·áÀÏ Æ÷¸ËÀ» Á¤ÀÇÇÏ´Â µÎ ÇàÀÇ ¼Ò½º Äڵ尡 ÀÖ¾ú´Ù´Â °ÍÀ» ±â¾ïÇÒ °ÍÀÌ´Ù.

     private static DateFormat expiresFormat1
         = new SimpleDateFormat("E, dd MMM yyyy k:m:s 'GMT'");

     private static DateFormat expiresFormat2
        = new SimpleDateFormat("E, dd-MMM-yyyy k:m:s 'GMT'");

ÀÌÀü Å×Å©ÆÁ¿¡¼­ ¼³¸íÇÑ Fetch ÇÁ·Î±×·¥À» US English ÀÌ¿ÜÀÇ locale¿¡¼­ ½ÇÇàÇÒ °æ¿ì ÇÁ·Î±×·¥Àº ÀÛµ¿ÇÏÁö ¾Ê°Ô µÈ´Ù. ÇÁ·Î±×·¥ÀÌ US English ÀÌ¿ÜÀÇ locale¿¡¼­ Á¦´ë·Î ½ÇÇàµÇ·Á¸é Cookie Ŭ·¡½º¿¡¼­ localeÀ» ´ÙÀ½°ú °°ÀÌ Á¤È®ÇÏ°Ô ¼³Á¤ÇØ¾ß ÇÑ´Ù.

     private static DateFormat expiresFormat1
         = new SimpleDateFormat
            ("E, dd MMM yyyy k:m:s 'GMT'", Locale.US);

     private static DateFormat expiresFormat2
        = new SimpleDateFormat
           ("E, dd-MMM-yyyy k:m:s 'GMT'", Local.US);

ÀÌÀü Å×Å©ÆÁÀÇ ¾ÆÄ«ÀÌºê ¹öÀüÀº ÀÌ º¯°æ »çÇ×À» ¹Ý¿µÇÏ¿© ¾÷µ¥ÀÌÆ®µÇ¾ú´Ù.

Back to Top

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

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

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