โ˜•๏ธ ์ž๋ฐ”: Java

Java 11 ์ฃผ์š” ๋ณ€๊ฒฝ์ 

๐Ÿค ์ค€์ฝฉ์ด 2023. 6. 19. 21:53

๐Ÿ”ฎ ๋“ค์–ด๊ฐ€๋ฉฐ

 

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 ๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐ ํ•ด์ œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ์‹œํ—˜, ํ…Œ์ŠคํŠธ ๋ชฉ์  ๋“ฑ์˜ ํŠน์ • ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.