프로그래밍 시 직접적인 영향이 있는 것들 위주로 정리
Java 10
Local-Variable Type Interface
알맞게 번역해 보면 `지역 변수 타입 추론` 정도가 되겠다.
var 도입으로 dynamic type을 지원하는 것은 아니며 컴파일러가 알아서 타입을 추론해서 컴파일 해주는 것.
// java 1.6 List<String> list = new ArrayList<String>();
// java 1.7 List<String> list = new ArrayList<>();
// java 10 var list = new ArrayList<String>(); var stream = list.stream();
제약사항
- null 안됨
- local 변수가 아닌 경우 안됨
- 초기값 없으면 안됨
- 배열 안됨
- method 인자값으로는 사용 불가
- 람다식에서 사용 불가
주의사항
- 어떤 타입인지 알 수 없게 되어 가독성이 떨어지게 됨
var 사용시에는 변수이름에 타입을 추가하는 방식을 사용해서 가독성을 높여주는게 좋음
java.net 가이드라인 (http://openjdk.java.net/projects/amber/LVTIstyle.html)
API
73개의 표준 클래스 라이브러리 API가 추가됨
java.io.Reader
long transferTo(Writer) // reads all characters from this reader and writes the characters to the given writer in the order that they are read.
java.util.{Collection}
/** *@Collection List, Map, Set */ static Collection copyOf(Collection); // These return an unmodifiable List, Map or Set containing the elements of the given Collection, in its iteration order.
java.util.{Optional}
/** *@Optional Optiona, OptionalDouble, OptionalInt, OptionalLong */ Throwable orElseThrow(); // New method which essentially does the same as get(), i.e. if the Optional holds a value it is returned. // Otherwise, a NoSuchElementException is thrown.
java.util.stream.Collectors
Collector toUnmodifiableList(); Collector toUnmodifiableSet(); Collector toUnmodifiableMap(Function, Function); Collector toUnmodifiableMap(Function, Function, BinaryOperator); // These four new methods return Collectors that accumulate the input elements into the appropriate unmodifiable collection.
기타
CDS(Class-Data Sharing)
JVM 기동시 성능을 향상하거나 여러대의 JVM이 하나의 물리 장비 또는 가상 장비에서 돌아가는 경우, 자원에 미치는 영향을 줄이기 위한 기능
CDS는 JVM에서 공통으로 사용하는 클래스들을 공유하는 저장소에 위치시키고 이를 공유해서 사용하는 방식으로 제공됨 (.jsa 파일)
Additional Unicode Language-Tag Extensions
java.util.Local 클래스의 향상된 버전 (cu, fw, rg, tz 태그가 추가됨)
나머지는 JVM, Compiler, 기타 변경 및 개선이라서 관심 있는 사람들만 찾아보면 됨 (http://openjdk.java.net/projects/jdk/10/)
Java 13
Switch-Case
// Java 12 이전
private static String getText(int number) {
String rtn = "";
switch(number) {
case 1, 2:
rtn = "one or two";
break;
case 3:
rtn = "three";
break;
default:
rtn = "Unknown";
break;
};
return result;
}
// Java 12
private static String getText(int number) {
String rtn = switch(number) {
case 1, 2:
break "one or two";
case 3:
break "three";
default:
break "unknown";
};
return rtn;
}
// Java 13
private static String getText(int number) {
String rtn = switch(number) {
case 1, 2: -> {
yield "one or two";
}
case 3 -> {
yield "three";
}
default -> "Unknown";
};
}
Text Block
// AS-IS
String mailHtml = "<html>\n" +
" <body>\n" +
" <p>Hello</p>\n" +
" </body>\n" +
"</html>";
// TO-BE
String newMailHtml = """
<html>
<body>
<p>Hello</p>
<body>
</html>
""";
'IT > JAVA' 카테고리의 다른 글
ServletFilter 를 이용한 Download File 분석 (0) | 2020.09.29 |
---|---|
Cannot deserialize value of type `java.time.LocalDateTime` from String.... `0000-00-00 00:00:00` 처리 방법 (3) | 2020.06.11 |
Gson Serialize 시 예외 시키기 (@Expose) (0) | 2019.11.28 |
Rest API QueryString Parsing for MyBatis (0) | 2019.09.24 |
Gson LocalDateTime 처리(BEGIN_OBJECT but was STRING) (2) | 2019.09.18 |