7월 10일 - JVM

Yullgiii·2024년 7월 10일
0

Java 8, 9, 10, 11의 주요 기능

Java 8

Java 8은 함수형 프로그래밍 패러다임을 도입하여 기존의 Java와는 다른 방식으로 코드를 작성할 수 있게 되었다. 주요 기능들은 다음과 같다.

함수형 프로그래밍 패러다임 적용

  • Lambda Expression: 익명 함수를 생성하기 위한 식으로, 코드의 간결성을 높여준다.
  • Stream API: 컬렉션 데이터를 처리하는 데 사용되는 API로, 함수형 프로그래밍 스타일을 지원한다.
  • Functional Interface: 하나의 추상 메서드만을 갖는 인터페이스로, 람다 표현식의 타입으로 사용된다.
  • Optional: NullPointerException을 방지하기 위한 클래스로, 값의 존재 여부를 표현한다.
  • 인터페이스에서 Default Method 사용 가능: 인터페이스에 메서드 구현을 포함할 수 있게 되어, 기존 코드를 변경하지 않고도 인터페이스에 새로운 메서드를 추가할 수 있다.
  • 새로운 Date and Time API: java.time 패키지 내에 포함되어 있으며, 날짜와 시간을 더 쉽게 다룰 수 있게 한다.

예제 코드: Lambda Expression과 Stream API

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

public class Java8Features {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

        // Lambda Expression
        names.forEach(name -> System.out.println(name));

        // Stream API
        long count = names.stream()
                          .filter(name -> name.startsWith("A"))
                          .count();
        System.out.println("Count of names starting with A: " + count);

        // Optional
        Optional<String> optionalName = names.stream()
                                             .filter(name -> name.startsWith("Z"))
                                             .findFirst();
        optionalName.ifPresent(System.out::println);
    }
}

JVM 개선

  • Permanent Heap 삭제: JVM에 의해 크기가 결정되던 Permanent Heap이 삭제되고, OS가 자동 조정하는 Native 메모리 영역인 Metaspace가 추가되었다.
  • Default GC: Serial GC에서 Parallel GC로 변경되어 멀티 스레드 방식으로 Garbage Collection이 이루어지게 되었다.

Java 9

Java 9는 모듈 시스템을 도입하고, 여러 API를 개선하였다.

주요 기능

  • Module System: 모듈화를 통해 애플리케이션의 구조를 더 잘 정의할 수 있게 되었다.
  • 인터페이스에서 Private Method 사용 가능: 인터페이스 내에 private 메서드를 정의할 수 있게 되어 코드의 재사용성을 높였다.
  • Collection, Stream, Optional API 개선: Immutable collection, Stream.ofNullable(), Optional.orElseGet() 등의 메서드가 추가되었다.
  • Default GC: Parallel GC에서 G1GC로 변경되어 멀티 프로세서 환경에 적합하게 되었다.

예제 코드: 모듈 시스템과 Stream.ofNullable()

module com.example.myapp {
    requires java.base;
}

import java.util.stream.Stream;

public class Java9Features {
    public static void main(String[] args) {
        Stream.ofNullable("Hello, World!")
              .forEach(System.out::println);
    }
}

Java 10

Java 10에서는 지역 변수 타입 추론이 도입되었다.

주요 기능

  • var (지역 변수 타입 추론): var 키워드를 사용하여 변수의 타입을 컴파일러가 자동으로 추론하게 할 수 있다.

예제 코드: var 사용

public class Java10Features {
    public static void main(String[] args) {
        var message = "Hello, Java 10!";
        System.out.println(message);
    }
}

Java 11

Java 11은 여러 새로운 기능과 개선 사항을 도입하였다.

주요 기능

  • HTTP Client API: HTTP/2를 지원하며, 기존의 HttpURLConnection을 대체한다.
  • RestTemplate의 상위 호환: HttpClient를 통해 HTTP 요청을 더 쉽게 처리할 수 있다.
  • String API 사용법 개선: 여러 새로운 메서드가 추가되어 문자열을 더 쉽게 다룰 수 있게 되었다.
  • OracleJDK 독점 기능이 OpenJDK에 포함: OpenJDK와 OracleJDK 간의 기능 차이가 줄어들었다.

예제 코드: HTTP Client API와 String API

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.io.IOException;

public class Java11Features {
    public static void main(String[] args) {
        var client = HttpClient.newHttpClient();
        var request = HttpRequest.newBuilder()
                                 .uri(URI.create("https://api.github.com/"))
                                 .build();

        try {
            var response = client.send(request, HttpResponse.BodyHandlers.ofString());
            System.out.println(response.body());
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }

        // String API 개선
        var multilineString = "Hello\nWorld\nJava 11";
        multilineString.lines().forEach(System.out::println);
    }
}

So...

Java 8에서 11까지의 주요 기능들은 Java 언어의 기능을 크게 확장하고, 개발자의 생산성을 높이는 데 기여하였다. 함수형 프로그래밍 패러다임의 도입부터 HTTP/2 지원 및 String API 개선까지, 각 버전의 새로운 기능들을 잘 활용하면 더 효율적이고 간결한 코드를 작성할 수 있다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글