본문 바로가기
Web Programming

Java 11 주요 특징 with 예제 샘플 코드

by 맑은안개 2023. 1. 28.

 

Java 11 버전에서 추가된 주요 기능을 알아봅니다.

1. HTTP2 클라이언트 

- HttpClient 클래스를 사용하여 HTTP2 프로토콜 사용을 지원합니다.

- 다음은 HTTP2를 사용하여 네이버에 요청을 보내는 코드입니다.

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://www.naver.com"))
                .GET()
                .build();

client.sendAsync(request, BodyHandlers.ofString())
                .thenApply(HttpResponse::body)
                .thenAccept(System.out::println)
                .join();

2. 정적 기본 메소드

추가된 정적 기본 메소드 중 가장 흔히 사용하는 of 메소드에 알아봅니다. 

of 메소드는 주어진 요소들로 부터 새로운 불변 컬렉션(Immutable Collection) 생성에 사용됩니다.

List<Integer> list = List.of(1, 2, 3);
Set<String> set = Set.of("a", "b", "c");
Map<Integer, String> map = Map.of(1, "one", 2, "two", 3, "three");

3. String 클래스 lines() 함수

문자열내 개행값을 분리하여 스트림으로 반환하는 함수

String str = "Hello\nWorld\n";
str.lines().forEach(System.out::println);
// Output:
// Hello
// World

- 기타 String클래스에 추가된 유용한 함수로, strip, stripLeading, stripTrailing이 있습니다.

String input = "   leading and trailing whitespaces   ";
System.out.println(input.strip());            // "leading and trailing whitespaces"
System.out.println(input.stripLeading());     // "leading and trailing whitespaces   "
System.out.println(input.stripTrailing());    // "   leading and trailing whitespaces"

4. var

자바스크립트, 파이썬과 같이 변수 타입을 추론하여 타입을 지정하는 var를 사용할 수 있습니다. 😍

var list = new ArrayList<String>();
list.add("Hello");
list.add("World");
System.out.println(list);

5. 지연 초기화 ( Lazy Initialization )

객체 생성시 높은 비용을 요구하는 클래스가 있다고 할 때, 해당 클래스가 필요할 때만 생성하면 됩니다. 이를 위해 Java 11에서 도입된 Lazy 클래스를 사용합니다.

class LazyInitExample {
    private final Lazy<ExpensiveObject> expensive = Lazy.of(ExpensiveObject::new);
    public void doSomething() {
        // ExpensiveObject has not yet been created
        // ...
        // ExpensiveObject is needed
        ExpensiveObject obj = expensive.get();
        // use obj
        // ...
    }
}

- get() 을 사용하여 실제 ExpensiveObject 클래스가 필요할 때 생성합니다.

반응형