네00 면접 질문에서 가장 많이 사용한게 뭐냐 그리고 Java21, Java17이라고 했더니 각 특징에 대해서 물어봤지만 그에 대한 답을 하지 못했다… 따라서 공부해보고자 한다…!!
가장 영향력 있는 것 부터 정리해본다…!!
또한 LTS에서 처음 등장했기보다 LTS에서 제대로 알려지게된 것들을 말한다
Ex) Java16에 프리뷰 → JAVA17(LTS) 공식 등장
1) 먼저 LTS이다. 또한 spring3.0버전 부터는 17버전 부터 지원한다..!!!
→ 그래서 이전 버전을 사용자들이 정착하기 좋은 버전인듯… ㅇㅇ
Java 11
Java 11
버전에서는 Json
형식의 문자열을 다음과 같이 표현해야 했다.
한눈에 봐도 가독성이 매우 안좋은 것을 확인할 수 있다.
String jsonString = "{\n" +
" \"name\": \"Jinny\",\n" +
" \"age\": 20\n" +
"}";
Java 17
Java 17
에서는 텍스트 블록을 제공해서 3개의 큰 따옴표로 랩핑해서 표현할 수 있다.
String jsonString = """
{
"name": "Jinny",
"age": 20
}
""";
해당 instance검증 함수를 통해 Type캐스팅을 생략할 수 있다..
약간 TypeScript에서 사용하는 방식과 유사하다..!!
Befroe
if (obj instanceof String) {
String s = (String) obj; // 형변환 필요
...
}
After
if (obj instanceof String s) {
... // 여기서 s는 String 타입으로 안전하게 추론됨
}
상속에 대해 제한및 허용을 정해줄 수 있다..!!
code
public sealed class Shape permits Circle, Rectangle {}
final class Circle extends Shape {}
final class Rectangle extends Shape {}
JAVA내부의 JVM을 변화 시키는 비공식 API들을 차단함
따라서 기존 레거시들의 에러를 초래하긴 했지만 안정성을 챙기게됨
→ 물론 내부 설정 변경으로 비공식 기능들을 사용할 수 있다고 함
기존에 처리방식과 JAVA21이후 처리방식의 차이는 아래 그림 과 같다
[출처 : 코규리 https://guti-coding.tistory.com/167]
스레드에서 I/O작업 발생시에 Blocking이 일어나는데 이때 기존방식은 스레드를 직접 가져와서 사용하다보니 blocking을 마냥 기다려야했다.
하지만 After버전에서는 가상스레드가 Carrier스레드에 할당되어있고, 이 때문에 Blocking이 길어지면 해당 가상스레드말고 대기중인 스레드를 Carrier스레드에 할당한다.
실제 성능도 1.5배 상승했다고 한다.. (출처 :규리 https://guti-coding.tistory.com/167)
파이썬에서 가장 좋았던 경험중 하나는 F string이었다. 이경험을 JAVA21부터 누릴 수 있다.
String profile = F."""
이름: \{name}
나이: \{age}세
상태: \{age >= 20 ? "성인" : "미성년자"}
""";
—> 코드 가독성, 작성난이도 획기적으로 변할 것 같다.
REF :