ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java 11 특징
    카테고리 없음 2021. 2. 9. 23:05

    2018년 9월 25일, Java 10이 출시된 지 6개월만에 Java 11이 최종 release됐다. 어떤 변화들이 있는지 정리해봤다.

     

     

     

    Nest-Based Access Control


    아래의 nestmate 클래스를 보자.

    class Test {  
        static class Nest1 {  
            private int nest1Var; 
         } 
         static class Nest2 {  
            private int nest2Var;  
        }
     }

     

    Java 10 이하의 버전에서는 Nest1과 Nest2가 서로의 private value에 접근할 수 없었다. 접근하려면 setAccessible(true)를 호출해야만 했는데, Java 11부터는 setAccessible을 하지 않아도 접근할 수 있도록 변경됐다. 이것이 구체적으로 어떤 의미를 갖는지는 아직 잘 모르겠다만, 언어의 유연성이 좀 더 높아졌다고 이해하면 될 것 같다.

     

     

     

    HTTP Client (Standard)


    Java 9에서 추가되고 Java 10에서 업데이트 되었던 java.incubator.http 패키지가 java.net.http 패키지로 표준화되었다. HTTP Client의 구 버전이라고 할 수 있는 URLConnection는 Blocking 방식으로만 HTTP 통신이 가능하다는 단점이 있었다. 이제 HTTP Client를 사용하면 Blocking, Non Blocking 두 방식 모두 사용할 수 있다. 하지만 만약 Java 11과 Spring 5를 동시에 사용한다고 하면 Java 11의 HTTP Client를 사용하기보다는 Spring 5에서 제공하는 WebClient를 사용하는 게 더 나을 수 있다.

     

     

    백기선 유튜브의 HTTP Client vs WebClient 비교 영상을 참고해보면 HTTP Client는 예상대로 동작하지 않는 경우가 있다. 원인은 아마 실행 PC의 Resource에 의존적이거나 요구되는 특정 사용법이 있는 것으로 추정되는데, 그에 반해 WebClient는 딱히 별다른 조치 없이도 예상대로 잘 동작하는 것을 확인할 수 있다. 이외의 HTTP Client의 특징으로는 HTTP/2를 지원한다거나 Factory method 형태로 객체를 생성할 수 있다는 점을 들 수 있다.

     

     

     

    Local-Variable Syntax for Lambda Parameters


    Java 10부터 변수 타입으로 var를 사용할 수 있다. Java 11부터는 var를 람다 표현식의 타입 추론 parameter로도 사용할 수 있게 되었다. (사실 Java 8에서도 람다 표현식에서 var를 사용할 수 있었으나 Java 10때 삭제되었다가 Java 11부터 다시 복귀했다고 한다.) 람다 표현식 내에서 var를 사용하는 경우는 @Nullable, @NotNull 등의 어노테이션을 사용할 때를 들 수 있다.

     

     

     

    ZGC: A Scalable Low-Latency Garbage Collector (Experimental)


    새로운 GC가 등장했다. JVM의 GC가 동작할 때 가장 큰 부담은 애플리케이션이 멈추는 Stop-The-World 현상이다. ZGC는 Load barrier와 Colored object pointer를 함께 사용함으로써 이에 대한 부담을 줄여준다고 한다.

     

     

     

    String.strip()


    기존의 trim() 메소드가 제거하지 못 했던 유니 코드의 공백들을 포함하여 공백을 제거할 수 있는 메소드가 생겼다.

    바로 strip(), stripLeading(), stripTrailing() 이다. 

     

    openjdk 11 new feature 링크 

    댓글

Designed by Tistory.