Java8 vs Java11 vs Java17

람다 표현식

  • 함수형 프로그래밍 스타일을 자바에 도입

  • 예시

    // 기존 익명 클래스 방식
    new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("Hello, world!");
        }
    }).start();
    
    // 람다 표현식 방식
    new Thread(() -> System.out.println("Hello, world!")).start();

스트림 API

  • 컬렉션 데이터를 함수형 스타일로 처리하는 도구

  • 주로 Filtering, Mapping, Sorting 등의 작업을 쉽게 수행할 수 있게 해줌

  • 예시

신규 날짜와 시간 API

  • java.time package

  • java.util.Date와 java.util.Calendar의 복잡함과 불편함을 해결

  • 예시

디폴트 메서드

  • 인터페이스에서 메서드 구현을 제공

  • 예시

HttpClient 표준화

  • Java 9에서 소개되었던 HttpClient API가 Java 11에서 표준으로 채택 (기존에는 RestTemplate)

  • HTTP/1.1, HTTP/2, WebSocket 지원

var 키워드 사용 확장

  • 자바 10에서 소개되었던 var 키워드를 사용하여 지연 변수 타입을 추론할 수 있음.

여러 메서드 추가

  • String 클래스

    • isBlank(): 문자열이 공백으로만 이루어져 있는지 확인.

    • lines(): 문자열을 줄 단위로 분할하여 스트림으로 반환.

    • strip(), stripLeading(), stripTrailing(): 문자열의 앞뒤 공백을 제거.

    • repeat(int times): 문자열을 주어진 횟수만큼 반복.

    • 예시

  • Optional 클래스

    • isEmpty(): 값이 비어있는지 확인.

    • 예시

단일 파일 소스 코드 프로그램 실행

  • Java 11부터는 단일 파일로 작성된 소스 코드를 컴파일 없이 바로 실행할 수 있음.

가비지 컬렉터 개선

  • ZGC

    • 매우 낮은 Latency를 목표로 설계됨 - GC 중 쓰레드가 멈추는 시간을 짧게 유지

    • 대규모 Heap 지원 - 최대 수백 GB까지 메모리를 효율적으로 관리할 수 있음

    • 사용법

  • Epsilon GC

    • 실험적으로 등장

Record Class

  • 간결하고 명료한 방식으로 데이터 클래스를 정의할 수 있는 새로운 클래스 유형

  • 멤버 변수는 private final

  • 필드별 getter, equal, hashCode, toString 자동 생성

  • 예시

Sealed Class

  • 봉인된 클래스를 사용하여 계층 구조를 더 염격하게 제어

  • 예시

Pattern Matching 스위치문

  • switch문에 패턴을 적용하여 유연한 매칭이 가능해짐

  • 예시

Switch Expression

  • 기존의 Switch문의 중복을 제거한 방식

Last updated