블로그 Help

자바 11에서의 작은 변경 사항

시작

The Well-Grounded Java Developer 책을 읽으면서 책 내용 기반으로 자바 11에서의 작은 변경 사항을 정리합니다.

본문

var 키워드를 지원하는 지역 변수 타입 추론

var 키워드를 사용하여 지역 변수의 타입을 추론할 수 있습니다.

var example = "Hello, Java 11!"; example.getClass(); $1 ==> class java.lang.String

컬렉션 팩토리(JEP 213)

List

Listof() 메서드가 추가하여 불변 리스트를 쉽게 생성할 수 있습니다.

var listExample = List.of(1,2,3); listExample ==> [1, 2, 3] listExample.getClass(); $3 ==> class java.util.ImmutableCollections$ListN

Set

Setof() 메서드가 추가되어 불변 Set을 쉽게 생성할 수 있습니다.

var setExample = Set.of(1,2,3); setExample ==> [2, 3, 1] setExample.getClass(); $4 ==> class java.util.ImmutableCollections$SetN

Map

Map에도 of() 메서드가 추가되어 불변 Map을 쉽게 생성할 수 있습니다.

var mapExample = Map.of(1, "one", 2, "two", 3, "three"); mapExample ==> {2=two, 3=three, 1=one} mapExample.getClass(); $5 ==> class java.util.ImmutableCollections$MapN

뿐만 아니라 복잡한 Map을 생성할 때 ofEntries() 메서드를 사용할 수 있습니다.

var mapExample2 = Map.ofEntries( Map.entry(1, "one"), Map.entry(2, "two"), Map.entry(3, "three")); mapExample2 ==> {2=two, 3=three, 1=one} $11 ==> class java.util.ImmutableCollections$MapN

HTTP/2(자바 11)를 지원하는 HttpClient 추가

HttpClient를 사용하여 HTTP/2를 지원합니다.

동기적으로 HTTP 요청을 보내고 응답을 받는 예제입니다. 하나의 요청과 응답만 받습니다.

// 요청을 위한 HttpClient 생성 var client = HttpClient.newBuilder().build(); var uri = new URI("https://google.com"); // HttpRequest 인스턴를 생성 var request = HttpRequest.newBuilder(uri).build(); // HTTP 요청을 동기적으로 실행해서 그 응답을 저장한다. var response = client.send( request, // send 메서드는 응답 본문을 처리할 표준 BodyHandler를 요구한다. HttpResponse.BodyHandlers.ofString( Charset.defaultCharset())); System.out.println(response.body());

비동기적으로 HTTP 요청을 보내고 응답을 받는 예제입니다. 여러 응답을 받습니다.

// 요청을 위한 HttpClient 생성 var client = HttpClient.newBuilder().build(); var uri = new URI("https://google.com"); // HttpRequest 인스턴를 생성 var request = HttpRequest.newBuilder(uri).build(); var handler = HttpResponse.BodyHandlers.ofString(); // HTTP 요청을 비동기적으로 실행해서 그 응답을 저장한다. CompletableFuture.allOf( // 동일한 HttpClient 인스턴스를 사용하여 여러 요청을 보낼 수 있다. client.sendAsync(request, handler) .thenApply(HttpResponse::body) .thenAccept(System.out::println), client.sendAsync(request, handler) .thenApply(HttpResponse::body) .thenAccept(System.out::println), client.sendAsync(request, handler) .thenApply(HttpResponse::body) .thenAccept(System.out::println) ).join();

단일 소스 코드 프로그램

java에서도 스크립트 언어처럼 단일 소스 코드 프로그램을 실행할 수 있습니다.

예를 들어 HelloWorld.java 파일을 생성하고 다음과 같이 작성합니다.

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, Java 11!"); } }

그리고 다음과 같이 실행합니다.

$ java HelloWorld.java 결과=> Hello, Java 11!

하지만 다음과 같은 몇가지 제약이 있습니다.

  • 단일 소스 파일에 있는 코드로 제한됩니다.

  • 동일한 실행에서 추가적인 소스 파일을 참조할 수 없습니다.

  • 소스 파일에 여러 클래스를 포함할 수 있다.

  • 소스 파일에서 첫 번째 클래스를 진입점으로 선언해야 한다.

  • 진입점 클래스에서 main 메서드를 선언해야 한다.

또 자바 스크립트는 다음과 같이 셔뱅라인을 포함할 수도 있습니다.

#!/usr/bin/java --source 11 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, Java 11!"); } }

마무리

이로 인해 자바 11에서의 작은 변경 사항을 정리했습니다. 모든 변경 사항을 다루지는 않았지만, 이러한 변경 사항들이 자바 11을 사용하는 것을 더욱 편리하게 만들어줍니다.

참조

Last modified: 15 December 2024