Java 11 변경점

 

java x -> java 8로 변경된 것처럼 많은 변화는 있지 않습니다. 개발을 하며 사용할만한 변경점들에 대해서 알아보겠습니다. 

 

1. String class

 

java 8에서는 문자열 다루는 관련 메서드가 적었습니다. 추가된 것들을 알아보겠습니다. 

 

1-1. isBlank()

 

문자열이 비었거나, 공백인 경우를 판별해주는 메서드

 

String str1 = "";
String str2 = " ";
String str3 = " str";

System.out.println(str1.isBlank()); // true
System.out.println(str2.isBlank()); // true
System.out.println(str3.isBlank()); // false

 

1-2. lines()

 

문자열을 개행 단위로 쪼개어 스트림으로 반환해주는 메서드

String str = "str1\nstr2 \nstr3";

        str.lines()
                .forEach(System.out::println);
//        str1
//        str2
//        str3

 

1-3. repeat()

 

문자열을 n번 반복하고 이어서 반환해주는 메서드

 

String str = "str";

String repeatStr = str.repeat(3);

System.out.println(repeatStr); // strstrstr

 

1-4. stripLeading, stripTrailing, strip

 

각각 문자열 앞, 뒤, 모두 공백 제거 해주는 메서드

String str = " str ";

System.out.println(str.stripLeading()); //str
System.out.println(str.stripTrailing());// str
System.out.println(str.strip());        //str

 

2. java.nio.file.Files 유틸 클래스

 

파일에 대해 여러 작업을 수행할 수 있는 메서드들이 추가됨

 

2-1. writeString()

 

파일에 문자열을 쓰고, 경로를 반환해주는 메서드 charset 설정이 가능하며, 설정하지 않는다면 utf-8로 설정된다.

OpenOption은 여러가지 가 있고 설명하지는 않겠습니다. 

 

String path = Files.writeString("filePath", "string", StandardOpenOption.WRITE).toString();

 

2-2. readString()

 

파일의 내용을 String 으로 반환해주는 메서드

 

String path = Files.readString(Path.of("path"));

 

2-3. isSameFile()

 

경로를 확인하여, 같은 파일인지 확인해주는 메서드

 

boolean isSameFile = Files.isSameFile(Path.of("path1"), Path.of("path2"));

 

3. 람다인자에 var 사용

 

var키워드는 java 10에서 도입됐고, 11에서 람다의 인자에서 사용할 수 있게 됐습니다. 

var는 컴파일 시기 타입 추론으로서 코드의 모호함을 증가시켜 복잡성을 증가시킬 수 있습니다. 따라서 남용해서는 안되고, 11에서 도입된 람다 인자에서 var 사용이 대표적인 좋은 예입니다. 

 

람다의 인자에서는 어노테이션을 추가할 수 없지만 var를 사용한 경우 아래와 같이 어노테이션을 추가할 수 있습니다.

list.stream()
        .map((@NotNull var s) -> s.toLowerCase())
        .collect(Collectors.toList());

 

4. Predicate.not()

 

Predicate에서 .not() 메서드를 통해서 부정을 반환할 수 있습니다.

 

간단히 해석해보면, 3보다 작은 것들의 부정이므로 3보다 같거나 큰 것들을 통과시킬 수 있습니다.

List<String> collect = strs.stream()
        .filter(Predicate.not(str -> str.length() < 3))
        .collect(Collectors.toList());

 

정리

 

String, Files에 관련 메서드들이 추가됐으며, 가장 눈여겨볼 것은 람다 인자에서의 어노테이션으로 생각합니다. 해당 게시글에서는 GC,  java 파일 실행(컴파일 없이 실행 가능) 등등 부분은 제외했습니다.

 

'JAVA' 카테고리의 다른 글

API 공통 응답 형식 정하기  (1) 2023.10.23
Java Null 처리에 대한 여정  (0) 2023.10.16
Java Garbage Collection  (0) 2022.05.30
이펙티브 자바  (0) 2022.04.22
JAVA Overloading & Overriding  (0) 2022.02.26