Java
자바 11에서의 작은 변경 사항
AlbertIm
2024. 12. 2. 22:55
시작
The Well-Grounded Java Developer 책을 읽으면서 책 내용 기반으로 자바 11에서의 작은 변경 사항을 정리합니다.
본문
var
키워드를 지원하는 지역 변수 타입 추론
var
키워드를 사용하여 지역 변수의 타입을 추론할 수 있습니다.
var example = "Hello, Java 11!";
example.getClass();
$1 ==> class java.lang.String
컬렉션 팩토리(JEP 213)
List
List
에 of()
메서드가 추가하여 불변 리스트를 쉽게 생성할 수 있습니다.
var listExample = List.of(1,2,3);
listExample ==> [1, 2, 3]
listExample.getClass();
$3 ==> class java.util.ImmutableCollections$ListN
Set
Set
에 of()
메서드가 추가되어 불변 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을 사용하는 것을 더욱 편리하게 만들어줍니다.