Java 11 ~ 15 주요 변경점

JDK 11

1. String 클래스에 유용한 메서드 추가

isBlank()

문자열이 비어있거나, 공백 문자만을 포함하고 있는지 검사한다.

 

 

lines()

문자열을 줄바꿈 문자 '\n' 를 기준으로 분리하고,

분리된 각 줄을 요소로하는 stream 을 반환한다.

 

 

repeat(int n)

문자열을 주어진 횟수만큼 반복하여 반환한다.

 

 

strip(), stripLeading(), stripTrailing()

문자열의 앞뒤 혹은 특정 부분에서 공백 문자를 제거한다.

 

<참고>

trim() 메서드와 비슷하지만..

trim() 메서드는 ASCII 공백 문자만 처리하지만,

strip() 계열 메서드는 유니코드 공백 문자를 모두 처리하여 상위호환이다.

 

ASCII 공백 문자 :

스페이스(' '), 탭('\t'), 줄바꿈('\n') 등

유니코드 공백 문자 :

위 ASCII 공백 문자를 포함하여 다른 공백 문자들도 존재

 

 

 

2. Files 클래스에 메서드 추가

Files.writeString()

String 문자열을 통째로 파일에 저장하는 메서드

 

Files.readString()

파일의 문자열을 통째로 String 문자열에 할당하는 메서드

 

 

 

JDK 12

 

1. String 클래스에 메서드 추가

 

indent(int n)

문자열의 각 줄에 지정된 수의 공백을 추가하거나 제거한다.

 

 

transform(Function<? super String, ? extends R> function)

주어진 함수를 문자열에 적용하고, 그 결과를 반환한다.

 

 

JDK 14

1. switch 식

Java 14 이전에는 switch가 값을 만들 수 없었지만..

Java 14 부터 switch 가 값을 만들어 낼 수 있게 되었다.

 

코드

일반적인 switch 문에서 ':' 를 사용하던 것을 '->' 를 사용하면 된다.

값을 만들어 내므로 변수에 할당할 수 있게 되었다.

 

 

JDK 15

1. 텍스트 블록

여러 줄의 문자열을 쉽게 작성할 수 있다.

 

코드

줄의 마지막 부분에 역슬래시를 추가하면 줄바꿈을 제거하는 의미가 된다.

 

 

2. String 클래스에 메서드 추가

formatted(Object... args)

위 예시 코드 처럼 String.format(String format, Object... args) 메서드와 비슷하다.

 

 

3. NPE 메시지 개선

NPE 메시지가 개선되어, NPE가 발생한 정확한 위치를 더 쉽게 알 수 있게 되었다.

 

예를 들어 아래와 같은 코드가 있다고 하자..

class Person {
    String name;
}

public class Main {
    public static void main(String[] args) {
        Person person = null;
        System.out.println(person.name.length());
    }
}

 

Jdk 15 이전 버전에서는 실행하면..

Exception in thread "main" java.lang.NullPointerException

위와 같은 메시지가 출력되어 어떤 객체가 null 인지 알 수 없다.

 

Jdk 15 이후 버전에서는

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "person.name" is null

위와 같이 person.name 이 null 이라는 정보가 포함되어있어서

정확한 원인을 쉽게 알 수 있게 되었다.

 

참고>

JDK 15 에서는 -XX:+ShowCodeDetailsInExceptionMessages 옵션을 전달하여

해당 NPE 메시지 개선 기능을 활성화 해야 했으나, JDK 16 부터는 기본적으로 활성화 된다.

'Java' 카테고리의 다른 글

Java IO 와 동기 blocking + CPU 자원  (0) 2023.11.15
Java 16 주요 변경점  (0) 2023.05.20
Java 9, 10 주요 변경점  (0) 2023.05.19
불변 객체 validation  (1) 2023.05.07
불변 객체, lombok @Value 와 Java Record  (0) 2023.05.07