JAVA 17 JAVA 21

임규성·2025년 6월 21일
0

배경

네00 면접 질문에서 가장 많이 사용한게 뭐냐 그리고 Java21, Java17이라고 했더니 각 특징에 대해서 물어봤지만 그에 대한 답을 하지 못했다… 따라서 공부해보고자 한다…!!

추가

가장 영향력 있는 것 부터 정리해본다…!!

또한 LTS에서 처음 등장했기보다 LTS에서 제대로 알려지게된 것들을 말한다

Ex) Java16에 프리뷰 → JAVA17(LTS) 공식 등장


Java 17

1) 먼저 LTS이다. 또한 spring3.0버전 부터는 17버전 부터 지원한다..!!!

→ 그래서 이전 버전을 사용자들이 정착하기 좋은 버전인듯… ㅇㅇ

내기준 가장 영향있는 특징 으로 정렬

0) TextBlock

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
        }
        """;

1) Pattern Matching for instanceof

해당 instance검증 함수를 통해 Type캐스팅을 생략할 수 있다..

약간 TypeScript에서 사용하는 방식과 유사하다..!!

Befroe

if (obj instanceof String) {
    String s = (String) obj; // 형변환 필요
    ...
}

After

if (obj instanceof String s) {
    ... // 여기서 s는 String 타입으로 안전하게 추론됨
}

2) Sealed Classes

상속에 대해 제한및 허용을 정해줄 수 있다..!!

code

public sealed class Shape permits Circle, Rectangle {}

final class Circle extends Shape {}
final class Rectangle extends Shape {}

3) Strong Encapsulation of JDK Internals (JEP 403)

JAVA내부의 JVM을 변화 시키는 비공식 API들을 차단함

따라서 기존 레거시들의 에러를 초래하긴 했지만 안정성을 챙기게됨

→ 물론 내부 설정 변경으로 비공식 기능들을 사용할 수 있다고 함


Java 21

1) Virtual thread 처리방식 변화

기존에 처리방식과 JAVA21이후 처리방식의 차이는 아래 그림 과 같다
[출처 : 코규리 https://guti-coding.tistory.com/167]

스레드에서 I/O작업 발생시에 Blocking이 일어나는데 이때 기존방식은 스레드를 직접 가져와서 사용하다보니 blocking을 마냥 기다려야했다.

하지만 After버전에서는 가상스레드가 Carrier스레드에 할당되어있고, 이 때문에 Blocking이 길어지면 해당 가상스레드말고 대기중인 스레드를 Carrier스레드에 할당한다.

실제 성능도 1.5배 상승했다고 한다.. (출처 :규리 https://guti-coding.tistory.com/167)


2) Text Block + 보간

파이썬에서 가장 좋았던 경험중 하나는 F string이었다. 이경험을 JAVA21부터 누릴 수 있다.

String profile = F."""
            이름: \{name}
            나이: \{age}세
            상태: \{age >= 20 ? "성인" : "미성년자"}
            """;

—> 코드 가독성, 작성난이도 획기적으로 변할 것 같다.

REF :

profile
삶의 질을 높여주는 개발자

0개의 댓글