ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java 11. 주요 변경 내용
    BackEnd/Java 2024. 12. 6. 23:00
    반응형

      Java 11은 Java 10이 출시된지 6개월 후인 2018년 9월에 출시된 LTS 버전입니다.

     

    var

      Java 10에서 등장한 var을 람다식 매개변수에 적용 가능하게 되었습니다.

    // String 타입을 명시적으로 작성해 준 람다식입니다.
    Consumer<String> c1 = (String x) -> System.out.println(x);
    
    // Java 11부터 람다식에 var을 사용할 수 있습니다.
    Consumer<String> c2 = (var x) -> System.out.println(x);

     

    String 클래스 업데이트

    strip()

      띄어 쓰기 혹은 탭 같은 white space를 앞 뒤로 제거해주는 함수입니다.

    • stripLeading(): 앞 부분의 white space만 제거
    • stripTrailing(): 뒷 부분의 white space만 제거
      public static void stripExample() {
        String str = "   A BC ";
        System.out.println(str.strip());
      }

     

    isBlank()

      특정 문자열이 white space로만 구성되어 있다면 true를 반환합니다.

     

    lines()

      개행 문자를 기준으로 문자열을 쪼개 Stream<String>을 반환합니다.

      public static void linesExample() {
        String str = "A\nB";
        str.lines()
            .forEach(System.out::println);
      }

     

    repeat()

      반복 횟수를 파라미터로 받아 주어진 문자열을 반복해 새로운 이어붙인 문자열을 반환합니다.

      public static void repeatExample() {
        String str = "A ";
        System.out.println(str.repeat(3));
      }

     

    Collection API 업데이트

      기존에는 컬렉션을 배열로 변환하기 위해 배열을 직접 만들어 옮겨야 했습니다.

    List<String> strings = List.of("A", "B", "C");
    
    String[] strArray = new String[3];
    String[] result = strings.toArray(strArray);

    

      Java 11에서 추가된 toArray() 함수는 배열 생성자 참조를 사용할 수 있게 되었습니다.

    List<String> strings = List.of("A", "B", "C");
    String[] result = strings.toArray(String[]::new);

     

    Predicate

      주어진 조건을 반대로 전환할 수 있는 기능이 추가되었습니다.

    List<String> strings = List.of("A", " ", "  ");
    
    List<String> result = strings.stream()
      .filter(Predicate.not(String::isBlank))
      .collect(Collectors.toList());

     

    Files 클래스 업데이트

      파일 내용 전체를 문자열로 읽어 들이거나 문자열 전체를 파일에 써야 할 때 유용한 기능이 추가되었습니다. 다음은 readString() 메소드를 사용하여 Path를 받아 파일의 전체 내용을 문자열로 읽어 들이는 코드입니다. 문자열 전체를 특정 Path에 쓸 경우에는 writeString() 메소드를 사용하면 됩니다.

      public static void readStringExample() throws Exception {
        var path = Paths.get(Paths.get(".").toAbsolutePath() + "/xxx-api/test.txt");
        String str = Files.readString(path);
        System.out.println(str);
      }

     

    새로운 Http Client

      Java를 이용해 HTTP 요청을 주고 받아야 할 때 사용할 수 있는 API입니다. Java 9에서 인큐베이팅 모듈로 등장하고, Java 11에서 표준 모듈로 인정되었습니다.

     

    기존 Http Client- HttpUrlConnection

    • HTTP/2.0, HTTP/1.1 지원 불가능
    • 비동기 처리 불가능
    • 사용하거나 유지보수하는 것이 매우 어려움

      그래서 Java에서 HTTP Client가 필요한 경우, apache HttpClient, OkHttp, Jetty HttpClient 등 외부 라이브러리를 가져와 사용하였습니다.

     

    새로운 Http Client 특징

    • HTTP/2.0, HTTP/1.1 지원
    • WebSocket 지원
    • CompletableFuture를 이용한 비동기 매커니즘 지원
    • 람다와 같은 새로운 언어 시스템에 우호적

     

    핵심 객체

    • HttpRequest
    • HttpResponse<T>
    • HttpClient

      다음은 동기 방식으로 HttpClient를 사용한 예제 코드입니다.

      public static void httpClientSyncExample() throws Exception {
        var client = HttpClient.newHttpClient();
        var request = HttpRequest.newBuilder(URI.create("https://postman-echo.com/get"))
            .GET()
            .build();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        printlnWithThread(response.statusCode());
        printlnWithThread(response.body());
        client.close();
      }
      
      private static void printlnWithThread(Object obj) {
        System.out.printf("%s %s\n", Thread.currentThread().getName(), obj);
      }

     

      다음은 비동기 방식으로 호출한 예제 코드입니다.

      public static void httpClientAsyncExample() {
        var client = HttpClient.newHttpClient();
        var request = HttpRequest.newBuilder(URI.create("https://postman-echo.com/get"))
            .GET()
            .build();
        client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
            .thenAccept((response) -> {
              printlnWithThread(response.statusCode());
              printlnWithThread(response.body());
            });
        client.close();
      }
    반응형

    'BackEnd > Java' 카테고리의 다른 글

    Java 14. Switch Expression  (0) 2024.12.07
    Java 12. preview feature  (0) 2024.12.07
    Java 10. 주요 변경 내용  (1) 2024.12.05
    Java 9. 주요 변경 내용 (2)  (0) 2024.12.04
    Java 9. 주요 변경 내용 (1)  (0) 2024.12.03

    댓글

Designed by Tistory.