Java 11 ์ฃผ์ ๋ณ๊ฒฝ์
๐ฎ ๋ค์ด๊ฐ๋ฉฐ
Java 11 ์ Java 8 ์ดํ๋ก ๋์จ ์ค์ํ ๋ฆด๋ฆฌ์ฆ ์ค ํ๋์ ๋๋ค.
์ด๋ฒ ๊ธ์์๋ Java 11 ์ ์ฃผ์ ๋ณ๊ฒฝ์ ์ ๋ํด ๋ค๋ค๋ณด๋ คํฉ๋๋ค.
1๏ธโฃ String ๊ด๋ จ ๋ฉ์๋ ์ถ๊ฐ
Java 8 ์์ ๋ถ์กฑํ๋ ๋ฌธ์์ด ๊ด๋ จ ๋ฉ์๋๋ค์ด ์ถ๊ฐ๋์์ต๋๋ค.
- isBlank()
๋ฌธ์์ด์ด ๋น์ด์๊ฑฐ๋, ๋น ๊ณต๋ฐฑ์ผ๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉด true ๋ฅผ ๋ฆฌํดํ๋ ๋ฉ์๋
- lines()
๋ฌธ์์ด์ ์ค ๋จ์๋ก ๋ถ๋ฆฌํ์ฌ Stream ํํ๋ก ๋ฆฌํดํ๋ ๋ฉ์๋
- strip(), stripLeading(), stripTrailing()
๋ฌธ์์ด์ ์๋ค, ์์ชฝ, ๋ค์ชฝ ๊ณต๋ฐฑ์ ์ ๊ฑฐํ๋ ๋ฉ์๋
- repeat(int count)
๋ฌธ์์ด์ ์ฃผ์ด์ง ํ์(count)๋งํผ ๋ฐ๋ณตํ์ฌ ์๋ก์ด ๋ฌธ์์ด์ ์์ฑํ๋ ๋ฉ์๋
2๏ธโฃ ์๋ก์ด ํ์ค HTTP ํด๋ผ์ด์ธํธ API ๋์
- ํ์ค API
์ด์ ์ HttpURLConnection
๋ฐ HttpClient
๋ JDK ์ ํฌํจ๋์ด ์์ง ์์ ๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐ๋ก ๊ด๋ฆฌํด์ผ ํ์ง๋ง, Java 11 ์ HTTP ํด๋ผ์ด์ธํธ๋ ํ์ค API ๋ก ์ ๊ณต๋๊ธฐ ๋๋ฌธ์ JDK ์ ํฌํจ๋์ด ์์ต๋๋ค.
- HTTP/2, WebSocket ์ง์
Java 11 ์ด์ ์๋ HTTP/2 ์ WebSocket ์ ์ง์๋์์ง๋ง, Java 11 ์ ์๋ก์ด HTTP ํด๋ผ์ด์ธํธ API ๋ ์ด๋ค์ ๋์ฑ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๊ฐ์ ๋์์ต๋๋ค.
- ๋น๋๊ธฐ ์ง์
๋น๋๊ธฐ ๋ฐ ๋๊ธฐ ์์ฒญ์ ๋ชจ๋ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ๋น๋๊ธฐ ์์ฒญ์ CompletableFuture
๋ฅผ ํตํด ์ฒ๋ฆฌ๋ฉ๋๋ค.
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;
public class HttpClientExample {
public static void main(String[] args) {
// HTTP ํด๋ผ์ด์ธํธ ์์ฑ
HttpClient httpClient = HttpClient.newHttpClient();
// HTTP ์์ฒญ ์์ฑ
HttpRequest httpRequest = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.build();
// ๋น๋๊ธฐ์ ์ผ๋ก HTTP GET ์์ฒญ ๋ณด๋ด๊ธฐ
CompletableFuture<HttpResponse<String>> responseFuture = httpClient.sendAsync(httpRequest, HttpResponse.BodyHandlers.ofString());
// ๋น๋๊ธฐ ์์
์๋ฃ ํ ์ฒ๋ฆฌ
responseFuture.thenApply(HttpResponse::body)
.thenAccept(responseBody -> {
// ์๋ต ์ฒ๋ฆฌ
System.out.println("Response Body: " + responseBody);
})
.join(); // ์์
์๋ฃ๊น์ง ๋๊ธฐ
}
}
3๏ธโฃ ๋๋ค ํ๋ผ๋ฏธํฐ์์ var ํค์๋ ์ด์ฉ
Java 10 ์์ ๋์ ๋ var ํค์๋๋ฅผ ๋๋ค ํ๋ผ๋ฏธํฐ์์ ์ด์ฉํ ์ ์๊ฒ ๋์์ต๋๋ค.
list.stream()
.map((@NotNull var s) -> s.toLowerCase())
.collect(Collectors.toList());
4๏ธโฃ java ๋ช ๋ น์ด๋ก Java ํ์ผ ์คํ
javac ๋ก Java ์์ค ํ์ผ์ ์ปดํ์ผํ์ง ์๊ณ ๋ ๋ฐ๋ก java ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ์ ์คํํ ์ ์๊ฒ ๋์์ต๋๋ค.
$ javac HelloWorld.java
$ java HelloWorld
Hello Java 8!
$ java HelloWorld.java
Hello Java 11!
5๏ธโฃ Garbage Collector ๊ด๋ จ
- G1 GC ๊ฐ์
G1 GC ๋ Java 7 ๋ถํฐ ๋์ ๋์ด, Java 11 ์์๋ ๊ณ์ํด์ ๊ฐ์ ๋์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ด์ ๋ฒ์ ์ G1 GC ์์๋ Full GC ๊ฐ ๋ฐ์ํ ๋ ์ผ์ ์ ์ง ์๊ฐ์ด ์์์น ๋ชปํ๊ฒ ๊ธธ์ด์ง๋ ๊ฒฝ์ฐ๊ฐ ์์๋๋ฐ Java 11 ์์๋ ์ผ์ ์ ์ง ์๊ฐ์ ๋์ฑ ์์ธก ๊ฐ๋ฅํ๊ฒ ์กฐ์ ํ์ฌ ์๋ต ์๋๋ฅผ ํฅ์์์ผฐ์ต๋๋ค. ๋ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํ์ ์์ ์ ๋ณ๋ ฌ๋ก ์ํํ๋๋ก ๊ฐ์ ํ์์ต๋๋ค.
- Epsilon GC
Java 11 ์์ ์คํ์ ์ธ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ธ Epsilon GC ๊ฐ ๋์ ๋์์ต๋๋ค.
Epsilon GC ๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ํด์ ์์ ์ ์ํํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ์ํ, ํ ์คํธ ๋ชฉ์ ๋ฑ์ ํน์ ์๋๋ฆฌ์ค์์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.