[Java] Java 버전 별 차이(java9, java11, java17, java21)

·2025년 9월 21일
1

Java

목록 보기
10/13
post-thumbnail

💡Java LTS 버전

자바는 3년정도의 텀으로 LTS(Long Term Support) 릴리스가 제공된다.
LTS란 Long Term Support의 약자로 장기 지원 버전을 의미한다. 자바의 LTS 버전은 특정 기간 동안 안정적인 지원과 업데이트를 제공받을 수 있다. 일반적으로 3년마다 출시되며, 출시 후 5년동안 기술 지원이 제공된다.


✅LTS버전을 사용해야 하는 이유는?

  1. 장기적인 지원
    Long Term Support란 이름과 같이 장기적으로 보안 업데이트와 버그 수정을 지원해준다

  2. 안정성
    광범위하게 테스트되고 안정화된 후 릴리스되므로 높은 신뢰성을 갖고 있다.

  3. 기업 환경에 적합
    많은 기업에서 규제 요구 사항을 충족하기 위해 장기적으로 지원되는 소프트웨어를 사용해야 한다

  4. 커뮤니티 및 생태계 지원
    LTS 버전은 많은 개발자와 기업에서 사용되므로 강력한 커뮤니티와 생태계를 갖고있다.
    또한, 주요 라이브러리와 프레임 워크가 LTS 버전을 우선적으로 지원하기 때문에 호환성이 높다.


💡자바 버전별 특징

📌Java 8

Java 8의 변경점으로는 크게 람다 표현식과 함수형 프로그래밍 지원이 있다. 이로 인해 코드의 가독성이 높아지고 간결한 코드를 작성할 수 있게 되었다.

1️⃣람다 표현식(Lambda Expressions)

  • 함수형 프로그래밍을 지원하여 코드의 간결성과 가독성을 높임
Arrays.sort(strArray, (String s1, String s2) -> s2.length() - s1.length());

2️⃣디폴트 메서드(Default Methods)

  • 인터페이스에 기본 메서드를 정의하여 기존 코드를 깨지 않고 기능을 추가할 수 있다.
default public Stream<T> stream() {
return StreamSupport.stream(spliterator(), false);
}

3️⃣스트림 API (Stream API)

  • 컬렉션 데이터의 반복, 필터링, 매핑 등을 간단하게 처리할 수 있는 API 도입
List<String> filtered = list.stream()
.filter(s -> s.startsWith("a"))
.collect(Collectors.toList());

4️⃣Optional 클래스

  • null 참조를 다루기 위한 컨테이너 클래스로, 보다 안전한 코드를 작성할 수 있다.
  • 참고
Optional<String> optional = Optional.of("Hello");
optional.ifPresent(System.out::println);

📌Java 11

1️⃣지역 변수 유형 추론(var 키워드)

  • 변수 선언 시 타입을 명시하지 않아도 컴파일러가 자동으로 타입을 추론해주는 기능 도입
var list = new ArrayList<String>();
list.add("Hello, Java 11");

2️⃣새로운 HTTP 클라이언트 API

  • java.net.http 패키지에 새로운 HTTP 클라이언트를 도입하여 HTTP/2 및 WebSocket을 지원
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
System.out.println(response.body())

📌Java 17

1️⃣패턴 매칭 for switch

  • switch 문에서 패턴 매칭을 사용하여 코드의 가독성을 높임
switch (obj) {
case Integer i -> System.out.println("Integer: " + i);
case String s -> System.out.println("String: " + s);
default -> System.out.println("Unknown type");
}

2️⃣Sealed Classes

  • 상속 구조를 제한하여 더 안전하고 예측 가능한 클래스 계층을 설계할 수 있게 함
public abstract sealed class Shape permits Circle, Square {}

3️⃣Record Patterns

  • 간단하게 불변 데이터 클래스를 정의할 수 있는 기능 정식 도입
public record Point(int x, int y) {}

📌Java 21

1️⃣Virtual Threads

  • 고성능 동시성을 제공하는 새로운 경량 스레드 모델 도입
Thread.startVirtualThread(() -> {
System.out.println("Hello from a virtual thread");
});

2️⃣Record Patterns

  • 레코드 패턴을 활용한 더 나은 데이터 추출 및 처리 가능

3️⃣Foreign Function & Memory API

  • 자바 애플리케이션이 외부 메모리와 상호 작용하는 새로운 방식 제공
profile
배우고 기록하며 성장하는 백엔드 개발자입니다!

0개의 댓글