Java ¹öÀüº° Ư¡
JDK 1.0(1991)
¤ýOAK ¹ßÇ¥: GE»çÀÇ ¿äûÀ¸·Î, ½ã¸¶ÀÌÅ©·Î ½Ã½ºÅÛÁî¿¡¼ C++ÀÇ ´ÜÁ¡À» ±Øº¹ÇÏ°íÀÚ ¸¸µç ¾ð¾î
¤ý¸Þ¸ð¸® ÇÒ´ç/ÇØÁ¦ÀÇ ¾î·Á¿ò°ú ´ÙÁß»ó¼ÓÀ¸·Î ÀÎÇÑ ½Ç¼öÀ¯¹ßÀ» ±Øº¹ÇÏ·Á°í Çß´Ù.
¤ý1996³â, JDK 1.0¹ßÇ¥ : Java·Î °³¸í, Java Virtual Machine 1.0À» ¹ßÇ¥Çß´Ù. Java Appletµµ À̶§ óÀ½ µµÀÔ
JDK1.1(1997)
¤ýJDBC, RMI, Reflection, JIT, Inner Class °³³äÀÌ Æ÷ÇÔ
JDK 1.2(1998)
¤ýJava SE 1.2, ME 1.2, EE 1.2 ¼¼°¡Áö¹öÀüÀ¸·Î ¹ßÇ¥
- SwingÀÌ SE¿¡ Æ÷ÇÔ, Corba IDL(ÀÌÁ¾±â±â°£ ÇÔ¼öÈ£Ãâ ½ºÆå), Collection Framework Æ÷ÇÔ
JDK 1.3(2000)
¤ýHotSpot(Sun¿¡¼ ¸¸µç JIT±¸Çö)
¤ýJNDI(µð·ºÅ丮 ¹× À̸§À¸·Î ¿øÇÏ´Â ¼ºñ½º ãÀ½)
JDK 1.4(2002)
¤ýJava Web StartÆ÷ÇÔ (À¥ ºê¶ó¿ìÀú¿¡¼ ÇÑ ¹øÀÇ Å¬¸¯À¸·Î ¸ðµç ±â´ÉÀ» °®Ãá ÀÀ¿ë ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼öÀÖ´Â ±â´ÉÀ» Á¦°øÇÏ´Â ÀÀ¿ë ÇÁ·Î±×·¥ ¹èÆ÷ ±â¼ú)
¤ýJCP(Java Community Process)¿¡ ÀÇÇؼ ¿ÀǼҽº Á¤Ã¥À¸·Î ÀÚ¹Ù°¡ °ü¸®µÇ±â ½ÃÀÛÇÑ ¹öÀü
¤ýJava 2 Security ¸ðµ¨ÀÇ È®¸³
¤ýLanguage: assert µµÀÔ
¤ýAPI : Regular Expression, Assert keyword, Security 2 version(ÇöÀç security model), Non Blocking IO(NIO)
Java 1.5(2004)
¤ý±â´ÉÀûÀ¸·Î °¡Àå ¸¹Àº º¯È°¡ »ý±ä¹öÀü (Generics°¡ °¡Àå ´ëÇ¥Àû)
¤ýLanguageI: Generics , annotation, auto boxing, enum,vararg ,foreach, static imports µµÀÔ
¤ýAPI : java.util.concurrent API, scanner class
Java 6(2006)
¤ý°¡ºñÁö Ä÷ºÅÍ G1(Garbage First) GC Áö¿ø
¤ýJDK 6¿¡¼´Â G1 GC¸¦ early access¶ó°í ºÎ¸£¸ç ±×³É ½ÃÇè »ï¾Æ »ç¿ëÇÒ ¼ö¸¸ ÀÖµµ·Ï ÇÑ´Ù.
¤ýº¸¾È, ¼º´É °È
¤ýJVM/Swing¿¡ ÀÖ¾î ¸¹Àº Performance Çâ»ó(synchronization, compiler, GC,start-up time)
Java 7(2011)
¤ýJVM : Dynamic Language support (invoked dynamic - new byte operation)
¤ýLanguage : try-resource, String in Switch, generics ³» ŸÀÔÃß·Ð, ¼ýÀÚ¿¡¼ underscore »ç¿ë °¡´É
¤ýAPI : Concurrency °È, NIO °È, sort°È, crypto°È, GPU°È
¤ýJavaFX°¡ ±âº»À¸·Î Æ÷ÇÔ
¤ýJDK 7¿¡¼ Á¤½ÄÀ¸·Î G1 GC¸¦ Æ÷ÇÔÇÏ¿© Á¦°ø
¤ý¾ÈÁ¤ÀûÀÎ ARMÁö¿ø
* generics³» ŸÀÔ Ãß·Ð
-ÀÌÀü ¹öÀü
Map<String, Object> user = new HashMap<String, Object>();
- 7¹öÀü
Map<String, Object> user = new HashMap<> ();
* Switch¹®¿¡¼ ¹®ÀÚ¿ Çã¿ë
switch (day) {
case "NEW": System.out.println("Order is in NEW state"); break;
case "CANCELED": System.out.println("Order is Cancelled"); break;
case "REPLACE": System.out.println("Order is replaced successfully"); break;
case "FILLED": System.out.println("Order is filled"); break;
default: System.out.println("Invalid");
}
* 7 ¿¡¼´Â try with resource ±¸¹®ÀÌ Ãß°¡µÇ¾î ÀÚµ¿À¸·Î ÀÚ¿øµéÀ» closeÇÑ´Ù.
ÀÌ·¯ÇÑ ¸ÞÄ¿´ÏÁòÀ» »ç¿ëÇϱâ À§Çؼ´Â AutoClosable, Closeable ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇØ¾ß ÇÑ´Ù.
Java 7ÀÇ Streams, Files, Socket, DB ConnectionµîÀº ÇØ´ç ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ°í ÀÖ´Ù.
- ÀÌÀü ¹öÀü
public static void main(String args[]) {
FileInputStream fin = null;
BufferedReader br = null;
try {
fin = new FileInputStream("info.xml");
br = new BufferedReader(new InputStreamReader(fin));
if (br.ready()) {
String line1 = br.readLine();
System.out.println(line1);
} catch (Exception ex) {
System.out.println("error!!");
} finally {
if (fin != null) fin.close();
if (br != null) br.close();
} catch (IOException ie) {
System.out.println("Failed to close files");
- 7 ¹öÀü
try (FileInputStream fin = new FileInputStream("info.xml");
BufferedReader br = new BufferedReader(new InputStreamReader(fin));) {
System.out.println("error");
* Fork/Join Framework
- fork/join framework´Â ¸ÖƼÇÁ·Î¼¼¼ÀÇ ¼º´ÉÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ExecutorServiceÀÎÅÍÆäÀ̽ºÀÇ ±¸ÇöüÀÌ´Ù.
¹Ýº¹ÀûÀ¸·Î ÀÛÀº Á¶°¢À¸·Î ÀÛ¾÷À» ³ª´©¾î ¼öÇà ÇÒ ¼ö ÀÖ°Ô ¼³°èµÇ¾îÀÖ´Ù.
* Underscore in Numeric literal
- ¼ýÀÚÇü(Á¤¼ö,½Ç¼ö)¿¡ _(underscore)¹®ÀÚ¿À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. Å« ¼ýÀÚ¸¦ ´Ù·ê¶§ °¡µ¶¼ºÀÌ ÁÁ¾ÆÁø´Ù.
int billion = 1_000_000_000; // 10^9
long creditCardNumber = 1234_4567_8901_2345L; //16 digit number
long ssn = 777_99_8888L;
double pi = 3.1415_9265;
float pif = 3.14_15_92_65f;
Java 8(2014)
- JDK´Â 2°³ ¹öÀüÀ¸·Î ³ª´¸. Çϳª´Â Æó¼âÀûÀÎ »ó¾÷ ÄÚµå ±â¹ÝÀÇ Oracle JDK, Çϳª´Â ¿ÀÇ ¼Ò½º ±â¹ÝÀÇ OpenJDKÀÌ´Ù.
- Oracle JDK¿¡ Á¸ÀçÇÏ°í OpenJDK¿¡´Â ¾ø´Â ´ëÇ¥Àû ±â´ÉÀ¸·Î ±Û²Ã ¶óÀ̺귯¸®¿Í Java Web Start°¡ ÀÖ´Ù.
¼¹ö ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß¿¡´Â ¾²ÀÌÁö ¾Ê´Â ±â´ÉµéÀÌ´Ù.
¤ýLambda ¹× ÇÔ¼öÇüÇÁ·Î±×·¡¹Ö, Default Method Interface, ¸Þ¼Òµå ÂüÁ¶
¤ýJEP¿¡ ÀÇÇؼ »õ·Î¿î ±â´ÉµéÀÌ ¹ßÀǵDZ⠽ÃÀÛ.
¤ýAPI : Nashorn (JS¿£Áø), new Date and Time API, Stream API, Collection¿¡ ´ëÇÑ ÇÔ¼öÇüÈ (Interface¿¡ default·Î ÀÎÇØ °¡´É)
»õ·Î¿î ³¯Â¥¿Í ½Ã°£ APIÀÎ java.time ÆÐÅ°Áö¸¦ Á¦°ø
* ±âÁ¸ Calendar Ŭ·¡½º¿¡¼´Â ¿ù(month)À» ³ªÅ¸³¾ ¶§ 1¿ùºÎÅÍ 12¿ùÀ» 0ºÎÅÍ 11±îÁö·Î Ç¥ÇöÇØ¾ß ÇÏ´Â ºÒÆíÇÔÀÌ ÀÖ´Ù.
±âÁ¸ Calendar ÀνºÅϽº´Â ºÒº¯ °´Ã¼(immutable object)°¡ ¾Æ´Ï¶ó¼ °ªÀÌ ¼öÁ¤µÉ ¼ö ÀÖ½À´Ï´Ù.
LocalDate today = LocalDate.now();
System.out.println("¿ÃÇØ´Â " + today.getYear() + "³âÀÔ´Ï´Ù.");
Java 9(2017)
¤ýJava¿ë REPL, JShell µîÀå (´ëÈ½Ä REPL(Read Eval print Loop) µµ±¸ Á¦°ø)
¤ýModular System (Jigsaw)Áö¿ø
¤ýºÒº¯ Collection(immutable collection)Á¦°ø
¤ýJava 9´Â À͸í Ŭ·¡½º¿¡ ´ëÇÑ Diamond Operator¸¦ Çã¿ë (anonymous inner Ŭ·¡½º¿¡¼ diamond operator »ç¿ë °¡´É)
¤ýtry-with-resources °³¼±
¤ýÀÎÅÍÆäÀ̽º ³» private ¸Þ¼Òµå »ç¿ë °¡´É
¤ýReactive Stream API Ãß°¡
¤ýOptional To Stream
¤ýHTTP2 Client
¤ýiCMS GC Deprecated µÊ
Java 10(2018)
¤ývar Å°¿öµå¸¦ ÀÌ¿ëÇÑ Áö¿ªº¯¼ö ¼±¾ð ¹× ŸÀÔÃß·Ð °¡´É
¤ýºÒº¯(Unmodifiable) Collection Çâ»ó
¤ýº´·Ä ó¸® °¡ºñÁö Ä÷º¼Ç µµÀÔÀ¸·Î ÀÎÇÑ ¼º´É Çâ»ó
¤ý°³º° ¾²·¹µå·Î ºÐ¸®µÈ Stop-The-World
¤ý·çÆ® CA ¸ñ·Ï µî Ãß°¡
¤ýJDKÀÇ Repository°¡ Çϳª·Î ÅëÇÕ
¤ýJVM Èü ¿µ¿ªÀ» ½Ã½ºÅÛ ¸Þ¸ð¸®°¡ ¾Æ´Ñ ´Ù¸¥ Á¾·ùÀÇ ¸Þ¸ð¸®¿¡µµ ÇÒ´ç °¡´É
¤ý½ÇÇèÀûÀÎ Java ±â¹ÝÀÇ JIT(Just In Time) ÄÄÆÄÀÏ·¯ Ãß°¡
¤ýDeprecatedµÈ API´Â Java SE 10¿¡¼ ¸ðµÎ »èÁ¦
Java 11(2018.09)
¤ýÀÏ¹Ý Áö¿øÀº 2023³â 9¿ù, ¿¬Àå Áö¿øÀº 2026³â 9¿ù¿¡ Á¾·áµÉ ¿¹Á¤ÀÌ´Ù.
¤ýÀÌŬ¸³½º Àç´ÜÀ¸·Î ³Ñ¾î°£ Java EE°¡ JDK¿¡¼ »èÁ¦µÇ°í, JavaFXµµ JDK¿¡¼ ºÐ¸®µÇ¾î º°µµÀÇ ¸ðµâ·Î Á¦°øµÈ´Ù.
¤ý¶÷´Ù ÆĶó¹ÌÅÍ¿¡ ´ëÇÑ Áö¿ªº¯¼ö ¹®¹ý : (var x, var y) -> x.process(y) => (x, y) -> x.process(y)
IntStream.of(1, 2, 3).filter((var i) -> i % 2 == 0).forEach(System.out::println);
IntStream.of(1, 2, 3).filter(i -> i % 2 == 0).forEach(System.out::println);
¤ýHTTP Ŭ¶óÀ̾ðÆ® Ç¥ÁØÈ ±â´É Ãß°¡ : Java 9, 10¿¡ »ç¿ëµÇ¾ú´ø jdk.incubator.http ÆÐÅ°Áö°¡ Ç¥ÁØȵǾî java.net.http ÆÐÅ°Áö·Î Ãß°¡
¤ý³×½ºÆ® ±â¹Ý ¾×¼¼½º ÄÁÆ®·Ñ(Nest-based access controls)
- ¾×¼¼½º °¡´É¼ºÀ» È®ÀåÇÏ´Â ºê¸´Áö ¸Þ¼Òµå »ðÀÔ Áö¿ø ÄÄÆÄÀÏ·¯ÀÇ Çʿ伺 Á¦°Å
- ´ÙÀ̳ª¹Í Ŭ·¡½º-ÆÄÀÏ ÄܽºÅº½º(Dynamic class-file constans)
- »õ·Î¿î ÇüÅÂÀÇ ±¸Ã¼È °¡´ÉÇÑ Å¬·¡½ºÆÄÀÏ »ó¼ö¸¦ ¸¸µå´Âµ¥ ¿ä±¸µÇ´Â ºñ¿ë°ú °£¼·À» ÁÙÀÌ°í, Ç¥Çö·Â°ú ¼º´ÉÀ» À§ÇÑ º¸´Ù ´Ù¾çÇÑ ¿É¼Ç Á¦°ø
- ¿¦½Ç·Ð(Epsilon) °¡Áöºñ Ä÷ºÅÍ : ¿À¹öÇìµåÀÇ ÃÖÀúÁö¿¬°ú ÇÒ´ç Á¦ÇÑÀÌ °¡´ÉÇÑ ¿ÏÀüÇÑ ¼öµ¿ °¡ºñÁö Ä÷ºÅÍ Àû¿ë
¤ýThe Z Garbage Collector(ZGC) : ´ë±â ½Ã°£ÀÌ ³·Àº È®Àå °¡´ÉÇÑ(Scalable Low-Latency) GCÀÌ´Ù.
¤ýÇöóÀÌÆ® ·¹ÄÚ´õ(Flight Recorder) : ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ǰú ÇÖ½ºÆÌ JVMÀÇ ¿À·ù ÇØ°áÀ» À§ÇÑ ³·Àº ¿À¹öÇìµå µ¥ÀÌÅÍ ¼öÁý ÇÁ·¹ÀÓ¿öÅ© Á¦°ø
Java 12(2019.03)
- Switch¹®ÀÇ È®Àå
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
Java ¹öÀüº° Ư¡
JDK 1.0(1991)
¤ýOAK ¹ßÇ¥: GE»çÀÇ ¿äûÀ¸·Î, ½ã¸¶ÀÌÅ©·Î ½Ã½ºÅÛÁî¿¡¼ C++ÀÇ ´ÜÁ¡À» ±Øº¹ÇÏ°íÀÚ ¸¸µç ¾ð¾î
¤ý¸Þ¸ð¸® ÇÒ´ç/ÇØÁ¦ÀÇ ¾î·Á¿ò°ú ´ÙÁß»ó¼ÓÀ¸·Î ÀÎÇÑ ½Ç¼öÀ¯¹ßÀ» ±Øº¹ÇÏ·Á°í Çß´Ù.
¤ý1996³â, JDK 1.0¹ßÇ¥ : Java·Î °³¸í, Java Virtual Machine 1.0À» ¹ßÇ¥Çß´Ù. Java Appletµµ À̶§ óÀ½ µµÀÔ
JDK1.1(1997)
¤ýJDBC, RMI, Reflection, JIT, Inner Class °³³äÀÌ Æ÷ÇÔ
JDK 1.2(1998)
¤ýJava SE 1.2, ME 1.2, EE 1.2 ¼¼°¡Áö¹öÀüÀ¸·Î ¹ßÇ¥
- SwingÀÌ SE¿¡ Æ÷ÇÔ, Corba IDL(ÀÌÁ¾±â±â°£ ÇÔ¼öÈ£Ãâ ½ºÆå), Collection Framework Æ÷ÇÔ
JDK 1.3(2000)
¤ýHotSpot(Sun¿¡¼ ¸¸µç JIT±¸Çö)
¤ýJNDI(µð·ºÅ丮 ¹× À̸§À¸·Î ¿øÇÏ´Â ¼ºñ½º ãÀ½)
JDK 1.4(2002)
¤ýJava Web StartÆ÷ÇÔ (À¥ ºê¶ó¿ìÀú¿¡¼ ÇÑ ¹øÀÇ Å¬¸¯À¸·Î ¸ðµç ±â´ÉÀ» °®Ãá ÀÀ¿ë ÇÁ·Î±×·¥À» ½ÇÇàÇÒ ¼öÀÖ´Â ±â´ÉÀ» Á¦°øÇÏ´Â ÀÀ¿ë ÇÁ·Î±×·¥ ¹èÆ÷ ±â¼ú)
¤ýJCP(Java Community Process)¿¡ ÀÇÇؼ ¿ÀǼҽº Á¤Ã¥À¸·Î ÀÚ¹Ù°¡ °ü¸®µÇ±â ½ÃÀÛÇÑ ¹öÀü
¤ýJava 2 Security ¸ðµ¨ÀÇ È®¸³
¤ýLanguage: assert µµÀÔ
¤ýAPI : Regular Expression, Assert keyword, Security 2 version(ÇöÀç security model), Non Blocking IO(NIO)
Java 1.5(2004)
¤ý±â´ÉÀûÀ¸·Î °¡Àå ¸¹Àº º¯È°¡ »ý±ä¹öÀü (Generics°¡ °¡Àå ´ëÇ¥Àû)
¤ýLanguageI: Generics , annotation, auto boxing, enum,vararg ,foreach, static imports µµÀÔ
¤ýAPI : java.util.concurrent API, scanner class
Java 6(2006)
¤ý°¡ºñÁö Ä÷ºÅÍ G1(Garbage First) GC Áö¿ø
¤ýJDK 6¿¡¼´Â G1 GC¸¦ early access¶ó°í ºÎ¸£¸ç ±×³É ½ÃÇè »ï¾Æ »ç¿ëÇÒ ¼ö¸¸ ÀÖµµ·Ï ÇÑ´Ù.
¤ýº¸¾È, ¼º´É °È
¤ýJVM/Swing¿¡ ÀÖ¾î ¸¹Àº Performance Çâ»ó(synchronization, compiler, GC,start-up time)
Java 7(2011)
¤ýJVM : Dynamic Language support (invoked dynamic - new byte operation)
¤ýLanguage : try-resource, String in Switch, generics ³» ŸÀÔÃß·Ð, ¼ýÀÚ¿¡¼ underscore »ç¿ë °¡´É
¤ýAPI : Concurrency °È, NIO °È, sort°È, crypto°È, GPU°È
¤ýJavaFX°¡ ±âº»À¸·Î Æ÷ÇÔ
¤ýJDK 7¿¡¼ Á¤½ÄÀ¸·Î G1 GC¸¦ Æ÷ÇÔÇÏ¿© Á¦°ø
¤ý¾ÈÁ¤ÀûÀÎ ARMÁö¿ø
* generics³» ŸÀÔ Ãß·Ð
-ÀÌÀü ¹öÀü
Map<String, Object> user = new HashMap<String, Object>();
- 7¹öÀü
Map<String, Object> user = new HashMap<> ();
* Switch¹®¿¡¼ ¹®ÀÚ¿ Çã¿ë
switch (day) {
case "NEW": System.out.println("Order is in NEW state"); break;
case "CANCELED": System.out.println("Order is Cancelled"); break;
case "REPLACE": System.out.println("Order is replaced successfully"); break;
case "FILLED": System.out.println("Order is filled"); break;
default: System.out.println("Invalid");
}
* 7 ¿¡¼´Â try with resource ±¸¹®ÀÌ Ãß°¡µÇ¾î ÀÚµ¿À¸·Î ÀÚ¿øµéÀ» closeÇÑ´Ù.
ÀÌ·¯ÇÑ ¸ÞÄ¿´ÏÁòÀ» »ç¿ëÇϱâ À§Çؼ´Â AutoClosable, Closeable ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇØ¾ß ÇÑ´Ù.
Java 7ÀÇ Streams, Files, Socket, DB ConnectionµîÀº ÇØ´ç ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ°í ÀÖ´Ù.
- ÀÌÀü ¹öÀü
public static void main(String args[]) {
FileInputStream fin = null;
BufferedReader br = null;
try {
fin = new FileInputStream("info.xml");
br = new BufferedReader(new InputStreamReader(fin));
if (br.ready()) {
String line1 = br.readLine();
System.out.println(line1);
}
} catch (Exception ex) {
System.out.println("error!!");
} finally {
try {
if (fin != null) fin.close();
if (br != null) br.close();
} catch (IOException ie) {
System.out.println("Failed to close files");
}
}
}
- 7 ¹öÀü
public static void main(String args[]) {
try (FileInputStream fin = new FileInputStream("info.xml");
BufferedReader br = new BufferedReader(new InputStreamReader(fin));) {
if (br.ready()) {
String line1 = br.readLine();
System.out.println(line1);
}
} catch (Exception ex) {
System.out.println("error");
}
}
}
* Fork/Join Framework
- fork/join framework´Â ¸ÖƼÇÁ·Î¼¼¼ÀÇ ¼º´ÉÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ExecutorServiceÀÎÅÍÆäÀ̽ºÀÇ ±¸ÇöüÀÌ´Ù.
¹Ýº¹ÀûÀ¸·Î ÀÛÀº Á¶°¢À¸·Î ÀÛ¾÷À» ³ª´©¾î ¼öÇà ÇÒ ¼ö ÀÖ°Ô ¼³°èµÇ¾îÀÖ´Ù.
* Underscore in Numeric literal
- ¼ýÀÚÇü(Á¤¼ö,½Ç¼ö)¿¡ _(underscore)¹®ÀÚ¿À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. Å« ¼ýÀÚ¸¦ ´Ù·ê¶§ °¡µ¶¼ºÀÌ ÁÁ¾ÆÁø´Ù.
int billion = 1_000_000_000; // 10^9
long creditCardNumber = 1234_4567_8901_2345L; //16 digit number
long ssn = 777_99_8888L;
double pi = 3.1415_9265;
float pif = 3.14_15_92_65f;
Java 8(2014)
- JDK´Â 2°³ ¹öÀüÀ¸·Î ³ª´¸. Çϳª´Â Æó¼âÀûÀÎ »ó¾÷ ÄÚµå ±â¹ÝÀÇ Oracle JDK, Çϳª´Â ¿ÀÇ ¼Ò½º ±â¹ÝÀÇ OpenJDKÀÌ´Ù.
- Oracle JDK¿¡ Á¸ÀçÇÏ°í OpenJDK¿¡´Â ¾ø´Â ´ëÇ¥Àû ±â´ÉÀ¸·Î ±Û²Ã ¶óÀ̺귯¸®¿Í Java Web Start°¡ ÀÖ´Ù.
¼¹ö ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß¿¡´Â ¾²ÀÌÁö ¾Ê´Â ±â´ÉµéÀÌ´Ù.
¤ýLambda ¹× ÇÔ¼öÇüÇÁ·Î±×·¡¹Ö, Default Method Interface, ¸Þ¼Òµå ÂüÁ¶
¤ýJEP¿¡ ÀÇÇؼ »õ·Î¿î ±â´ÉµéÀÌ ¹ßÀǵDZ⠽ÃÀÛ.
¤ýAPI : Nashorn (JS¿£Áø), new Date and Time API, Stream API, Collection¿¡ ´ëÇÑ ÇÔ¼öÇüÈ (Interface¿¡ default·Î ÀÎÇØ °¡´É)
»õ·Î¿î ³¯Â¥¿Í ½Ã°£ APIÀÎ java.time ÆÐÅ°Áö¸¦ Á¦°ø
* ±âÁ¸ Calendar Ŭ·¡½º¿¡¼´Â ¿ù(month)À» ³ªÅ¸³¾ ¶§ 1¿ùºÎÅÍ 12¿ùÀ» 0ºÎÅÍ 11±îÁö·Î Ç¥ÇöÇØ¾ß ÇÏ´Â ºÒÆíÇÔÀÌ ÀÖ´Ù.
±âÁ¸ Calendar ÀνºÅϽº´Â ºÒº¯ °´Ã¼(immutable object)°¡ ¾Æ´Ï¶ó¼ °ªÀÌ ¼öÁ¤µÉ ¼ö ÀÖ½À´Ï´Ù.
LocalDate today = LocalDate.now();
System.out.println("¿ÃÇØ´Â " + today.getYear() + "³âÀÔ´Ï´Ù.");
Java 9(2017)
¤ýJava¿ë REPL, JShell µîÀå (´ëÈ½Ä REPL(Read Eval print Loop) µµ±¸ Á¦°ø)
¤ýModular System (Jigsaw)Áö¿ø
¤ýºÒº¯ Collection(immutable collection)Á¦°ø
¤ýJava 9´Â À͸í Ŭ·¡½º¿¡ ´ëÇÑ Diamond Operator¸¦ Çã¿ë (anonymous inner Ŭ·¡½º¿¡¼ diamond operator »ç¿ë °¡´É)
¤ýtry-with-resources °³¼±
¤ýÀÎÅÍÆäÀ̽º ³» private ¸Þ¼Òµå »ç¿ë °¡´É
¤ýReactive Stream API Ãß°¡
¤ýOptional To Stream
¤ýHTTP2 Client
¤ýiCMS GC Deprecated µÊ
Java 10(2018)
¤ývar Å°¿öµå¸¦ ÀÌ¿ëÇÑ Áö¿ªº¯¼ö ¼±¾ð ¹× ŸÀÔÃß·Ð °¡´É
¤ýºÒº¯(Unmodifiable) Collection Çâ»ó
¤ýº´·Ä ó¸® °¡ºñÁö Ä÷º¼Ç µµÀÔÀ¸·Î ÀÎÇÑ ¼º´É Çâ»ó
¤ý°³º° ¾²·¹µå·Î ºÐ¸®µÈ Stop-The-World
¤ý·çÆ® CA ¸ñ·Ï µî Ãß°¡
¤ýJDKÀÇ Repository°¡ Çϳª·Î ÅëÇÕ
¤ýJVM Èü ¿µ¿ªÀ» ½Ã½ºÅÛ ¸Þ¸ð¸®°¡ ¾Æ´Ñ ´Ù¸¥ Á¾·ùÀÇ ¸Þ¸ð¸®¿¡µµ ÇÒ´ç °¡´É
¤ý½ÇÇèÀûÀÎ Java ±â¹ÝÀÇ JIT(Just In Time) ÄÄÆÄÀÏ·¯ Ãß°¡
¤ýDeprecatedµÈ API´Â Java SE 10¿¡¼ ¸ðµÎ »èÁ¦
Java 11(2018.09)
¤ýÀÏ¹Ý Áö¿øÀº 2023³â 9¿ù, ¿¬Àå Áö¿øÀº 2026³â 9¿ù¿¡ Á¾·áµÉ ¿¹Á¤ÀÌ´Ù.
¤ýÀÌŬ¸³½º Àç´ÜÀ¸·Î ³Ñ¾î°£ Java EE°¡ JDK¿¡¼ »èÁ¦µÇ°í, JavaFXµµ JDK¿¡¼ ºÐ¸®µÇ¾î º°µµÀÇ ¸ðµâ·Î Á¦°øµÈ´Ù.
¤ý¶÷´Ù ÆĶó¹ÌÅÍ¿¡ ´ëÇÑ Áö¿ªº¯¼ö ¹®¹ý : (var x, var y) -> x.process(y) => (x, y) -> x.process(y)
IntStream.of(1, 2, 3).filter((var i) -> i % 2 == 0).forEach(System.out::println);
IntStream.of(1, 2, 3).filter(i -> i % 2 == 0).forEach(System.out::println);
¤ýHTTP Ŭ¶óÀ̾ðÆ® Ç¥ÁØÈ ±â´É Ãß°¡ : Java 9, 10¿¡ »ç¿ëµÇ¾ú´ø jdk.incubator.http ÆÐÅ°Áö°¡ Ç¥ÁØȵǾî java.net.http ÆÐÅ°Áö·Î Ãß°¡
¤ý³×½ºÆ® ±â¹Ý ¾×¼¼½º ÄÁÆ®·Ñ(Nest-based access controls)
- ¾×¼¼½º °¡´É¼ºÀ» È®ÀåÇÏ´Â ºê¸´Áö ¸Þ¼Òµå »ðÀÔ Áö¿ø ÄÄÆÄÀÏ·¯ÀÇ Çʿ伺 Á¦°Å
- ´ÙÀ̳ª¹Í Ŭ·¡½º-ÆÄÀÏ ÄܽºÅº½º(Dynamic class-file constans)
- »õ·Î¿î ÇüÅÂÀÇ ±¸Ã¼È °¡´ÉÇÑ Å¬·¡½ºÆÄÀÏ »ó¼ö¸¦ ¸¸µå´Âµ¥ ¿ä±¸µÇ´Â ºñ¿ë°ú °£¼·À» ÁÙÀÌ°í, Ç¥Çö·Â°ú ¼º´ÉÀ» À§ÇÑ º¸´Ù ´Ù¾çÇÑ ¿É¼Ç Á¦°ø
- ¿¦½Ç·Ð(Epsilon) °¡Áöºñ Ä÷ºÅÍ : ¿À¹öÇìµåÀÇ ÃÖÀúÁö¿¬°ú ÇÒ´ç Á¦ÇÑÀÌ °¡´ÉÇÑ ¿ÏÀüÇÑ ¼öµ¿ °¡ºñÁö Ä÷ºÅÍ Àû¿ë
¤ýThe Z Garbage Collector(ZGC) : ´ë±â ½Ã°£ÀÌ ³·Àº È®Àå °¡´ÉÇÑ(Scalable Low-Latency) GCÀÌ´Ù.
¤ýÇöóÀÌÆ® ·¹ÄÚ´õ(Flight Recorder) : ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ǰú ÇÖ½ºÆÌ JVMÀÇ ¿À·ù ÇØ°áÀ» À§ÇÑ ³·Àº ¿À¹öÇìµå µ¥ÀÌÅÍ ¼öÁý ÇÁ·¹ÀÓ¿öÅ© Á¦°ø
Java 12(2019.03)
- Switch¹®ÀÇ È®Àå
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
}