신기능을 소개하는 몇가지 기사가 있어, 내용을 간단하게 정리했습니다. 12,13도 잘 모르는건 함정입니다
1. Switch
12, 13 버전에서 preview feature였던 신규 switch 표현식이 14에서 확정되었습니다.
기본적으로 람다식을 지원하며, Statement에서 Expression으로 바뀌면서 아래와 같이 리턴값을 받을 수 있게 되었습니다.
String result = switch (day) {
case "M", "W", "F" -> "MWF";
case "T", "TH", "S" -> "TTS";
default -> {
if(day.isEmpty())
yield "Please insert a valid day.";
else
yield "Looks like a Sunday.";
}
};
만약 return 사용 시 switch가 아닌 해당 메서드가 종료됩니다. 이를 위해 yield 키워드가 추가되었습니다.
2. Helpful NullPointerExceptions
가장 마음에 드는 feature 인데요.
a.b.c.i = 99; 와 같은 구문에서 NPE 발생 시, line number 뿐 아니라, 원인을 좀더 상세하게 보여 줍니다.
// before Java 14
Exception in thread "main" java.lang.NullPointerException at Prog.main(Prog.java:5)
// Java 14 Onwards
Exception in thread "main" java.lang.NullPointerException
: Cannot assign field "i" because "a" is null at Prog.main(Prog.java:5)
3. Records (Preview)
(preview 스펙은 --enable-preview 옵션을 사용해야 합니다.)
Record는 "데이터 클래스"이며 순수하게 데이터를 관리하는 특수한 종류의 클래스입니다.
Entity 등을 사용할 때 유용할 것 으로 보입니다.
public class DataClass {
private final String name;
private final Integer age;
public DataClass(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
...
}
우리에게 익숙한 패턴 대신, 대신 이렇게 사용할 수 있습니다.
public record NewRecord(
String name,
Integer age
) {}
기존에 lombok으로 처리하던 속성들을 기본으로 가지고 있습니다.
각 필드는 private final 필드로 정의됩니다.
모든 필드를 초기화하는 RequiredAllArgument 생성자가 생성됩니다.
필드명을 딴 getter가 생성됩니다.(name(), age(), address())
4. Text Blocks (Preview)
multiline string을 손쉽게 쓰기 위해 Java 13에 preview로 추가된 기능인데요.
여전히 preview이지만, 몇가지 추가적인 기능이 14에 추가되었습니다.
String before = ""
+ "{\n "
+ " \"id\":10,\n"
+ " \"age\":20\n"
+ "}\n";
String after = """
{
"id":10,
"age":20
}
""";
// before 와 after 는 같다.
String text1 = """
line1
line2 \s
line3
""";
String text2 = "line1\nline2 \nline3\n"
// text1와 text2 는 같다.
기타
CMS GC가 삭제되었습니다. 이를 계승하는 ZGC 등을 사용하도록 권장합니다.
이제 ZGC를 리눅스 뿐 아니라 맥과 윈도우에서도 지원합니다.
-XX:+UseConcMarkSweepGC 옵션 사용 시 아래와 같이 무시됩니다.
Java HotSpot(TM) 64-Bit Server VM warning: Ignoring option UseConcMarkSweepGC; support was removed in <version>
G1GC의 성능 향상을 위한 NUMA-aware memory allocation을 지원합니다. +XX:+UseNUMA
NUMA (Non-Uniform Memory Access)는 멀티코어 환경에서 메모리 엑세스 향상을 통해 성능에 도움을 준다고 합니다.
Pattern Matching for instanceof (Preview)
instanceof와 if 구문 사용 시, 별도로 캐스팅 않아도 됩니다.
// before Java 14
if (obj instanceof Journaldev) {
Journaldev jd = (Journaldev) obj;
System.out.println(jd.getAuthor());
}
// Java 14 Onwards
if (obj instanceof Journaldev jd) {
System.out.println(jd.getAuthor());
}
Oracle이 Java14를 발표한지도 몇달이 지났는데요.
신기능을 소개하는 몇가지 기사가 있어, 내용을 간단하게 정리했습니다.
12,13도 잘 모르는건 함정입니다1. Switch
12, 13 버전에서
preview feature
였던 신규 switch 표현식이 14에서 확정되었습니다.기본적으로 람다식을 지원하며, Statement에서 Expression으로 바뀌면서 아래와 같이 리턴값을 받을 수 있게 되었습니다.
만약 return 사용 시 switch가 아닌 해당 메서드가 종료됩니다. 이를 위해 yield 키워드가 추가되었습니다.
2. Helpful NullPointerExceptions
가장 마음에 드는 feature 인데요.
a.b.c.i = 99;
와 같은 구문에서 NPE 발생 시, line number 뿐 아니라, 원인을 좀더 상세하게 보여 줍니다.3. Records (Preview)
(preview 스펙은
--enable-preview
옵션을 사용해야 합니다.)Record는 "데이터 클래스"이며 순수하게 데이터를 관리하는 특수한 종류의 클래스입니다. Entity 등을 사용할 때 유용할 것 으로 보입니다.
우리에게 익숙한 패턴 대신, 대신 이렇게 사용할 수 있습니다.
기존에 lombok으로 처리하던 속성들을 기본으로 가지고 있습니다.
4. Text Blocks (Preview)
multiline string을 손쉽게 쓰기 위해 Java 13에 preview로 추가된 기능인데요. 여전히 preview이지만, 몇가지 추가적인 기능이 14에 추가되었습니다.
기타
CMS GC가 삭제되었습니다. 이를 계승하는 ZGC 등을 사용하도록 권장합니다.
-XX:+UseConcMarkSweepGC
옵션 사용 시 아래와 같이 무시됩니다.Java HotSpot(TM) 64-Bit Server VM warning: Ignoring option UseConcMarkSweepGC; support was removed in <version>
G1GC의 성능 향상을 위한 NUMA-aware memory allocation을 지원합니다.
+XX:+UseNUMA
Pattern Matching for instanceof (Preview)
instanceof
와if
구문 사용 시, 별도로 캐스팅 않아도 됩니다.참조
https://www.journaldev.com/37273/java-14-features https://www.techgeeknext.com/java/java14-features http://www.itworld.co.kr/news/135746 https://multifrontgarden.tistory.com/265