반응형
Java 버전별 차이 요약

Java 8
- Lambda
- Stream
- interface default method
- Optional : Nullable한 값 제공
Lambda
// before
Runnable runnable = new Runnable(){
@Override
public void run(){
System.out.println(*"Hello world !"*);
}
};
// after
Runnable runnable = () -> System.out.println(*"Hello world two!"*);
interface Vehicle {
void start(); // 추상 메서드
// default 메서드 (구현을 포함)
default void stop() {
System.out.println("차량을 멈춥니다.");
}
}
Java 11
- OpenJDK & OracleJDK 통합
- 동일한 JDK를 사용하여 기능적 차이가 사라짐
- 하지만, OpenJDK는 커뮤니티 기반으로 유지보수되지만, Oracle JDK는 공식적인 엔터프라이즈 기술 지원을 받을 수 있다.
- 버그 발생 시 빠른 해결 및 패치 제공을 원하기 때문에, 리스크 관리가 중요한 기업에 경우에는 Oracle JDK를 사용하고 있음
- Lambda 매개변수에 대한 지역 변수 추론 문법 추가 (var)
- HTTP Client : HttpClient (X : HttpURLConnetion)
- 하지만, 현재는 RestTemplate, RestClient, WebClient를 주로 사용
(var firstName, var lastName) -> firstName + lastName
Java 17
- Switch - 패턴 매칭
- Sealed Class 제공 : 특정 클래스만 상속할 수 있도록 제한 가능
- Record 클래스 - 불변 데이터 객체 제공
switch (obj) {
case Integer i -> System.out.println("Integer: " + i);
case String s -> System.out.println("String: " + s);
default -> System.out.println("Unknown type");
}
public abstract sealed class Shape permits Circle, Square {}
public record Point(int x, int y) {}
Java 21
- 가상 스레드 지원 - 플랫폼 스레드가 수천 만개의 가상 스레드를 관리
- I/O Bound 작업에 효과적이며, 일반 스레드와 달리 가상 스레드 간의 컨텍스트 스위칭 비용이 적음
- Switch - 패턴 매칭 고도화 정식 지원 (+ when 절)
- Foreign Function & Memory API 개선
- JNI(Java Native Interface) 방식보다 안전하고 직관적인 방식으로 네이티브 메모리와 함수를 다룰 수 있어.
switch (obj) {
case Integer i when i > 0 -> System.out.println("양의 정수: " + i);
case Integer i when i < 0 -> System.out.println("음의 정수: " + i);
case Integer i -> System.out.println("0");
case String s -> System.out.println("문자열: " + s);
default -> System.out.println("다른 타입");
}
import java.lang.foreign.MemorySegment;
import java.lang.foreign.MemorySession;
public class MemoryExample {
public static void main(String[] args) {
try (MemorySession session = MemorySession.openConfined()) {
MemorySegment segment = MemorySegment.allocateNative(100, session);
System.out.println("네이티브 메모리 100바이트 할당 완료!");
} // session이 자동으로 닫히면서 메모리 해제됨
}
}
참고자료
https://www.oracle.com/java/technologies/javase/8-whats-new.html
반응형
'JAVA' 카테고리의 다른 글
Java GC 동작 원리: 가비지 컬렉션이 메모리를 정리하는 법 (0) | 2025.04.02 |
---|---|
Java 객체 비교: equals()와 hashCode()로 보는 물리적 vs 논리적 동등성 (0) | 2025.03.31 |
Java Stream map vs flatMap 차이점과 활용법 (kotlin) (0) | 2025.03.04 |
Java 21 가상 스레드란? 기존 OS 스레드와의 차이점 정리 (0) | 2025.02.18 |
Java 프로그램 실행 과정, JVM 구조 이해하기 (0) | 2025.02.15 |
반응형
Java 버전별 차이 요약

Java 8
- Lambda
- Stream
- interface default method
- Optional : Nullable한 값 제공
Lambda
// before
Runnable runnable = new Runnable(){
@Override
public void run(){
System.out.println(*"Hello world !"*);
}
};
// after
Runnable runnable = () -> System.out.println(*"Hello world two!"*);
interface Vehicle {
void start(); // 추상 메서드
// default 메서드 (구현을 포함)
default void stop() {
System.out.println("차량을 멈춥니다.");
}
}
Java 11
- OpenJDK & OracleJDK 통합
- 동일한 JDK를 사용하여 기능적 차이가 사라짐
- 하지만, OpenJDK는 커뮤니티 기반으로 유지보수되지만, Oracle JDK는 공식적인 엔터프라이즈 기술 지원을 받을 수 있다.
- 버그 발생 시 빠른 해결 및 패치 제공을 원하기 때문에, 리스크 관리가 중요한 기업에 경우에는 Oracle JDK를 사용하고 있음
- Lambda 매개변수에 대한 지역 변수 추론 문법 추가 (var)
- HTTP Client : HttpClient (X : HttpURLConnetion)
- 하지만, 현재는 RestTemplate, RestClient, WebClient를 주로 사용
(var firstName, var lastName) -> firstName + lastName
Java 17
- Switch - 패턴 매칭
- Sealed Class 제공 : 특정 클래스만 상속할 수 있도록 제한 가능
- Record 클래스 - 불변 데이터 객체 제공
switch (obj) {
case Integer i -> System.out.println("Integer: " + i);
case String s -> System.out.println("String: " + s);
default -> System.out.println("Unknown type");
}
public abstract sealed class Shape permits Circle, Square {}
public record Point(int x, int y) {}
Java 21
- 가상 스레드 지원 - 플랫폼 스레드가 수천 만개의 가상 스레드를 관리
- I/O Bound 작업에 효과적이며, 일반 스레드와 달리 가상 스레드 간의 컨텍스트 스위칭 비용이 적음
- Switch - 패턴 매칭 고도화 정식 지원 (+ when 절)
- Foreign Function & Memory API 개선
- JNI(Java Native Interface) 방식보다 안전하고 직관적인 방식으로 네이티브 메모리와 함수를 다룰 수 있어.
switch (obj) {
case Integer i when i > 0 -> System.out.println("양의 정수: " + i);
case Integer i when i < 0 -> System.out.println("음의 정수: " + i);
case Integer i -> System.out.println("0");
case String s -> System.out.println("문자열: " + s);
default -> System.out.println("다른 타입");
}
import java.lang.foreign.MemorySegment;
import java.lang.foreign.MemorySession;
public class MemoryExample {
public static void main(String[] args) {
try (MemorySession session = MemorySession.openConfined()) {
MemorySegment segment = MemorySegment.allocateNative(100, session);
System.out.println("네이티브 메모리 100바이트 할당 완료!");
} // session이 자동으로 닫히면서 메모리 해제됨
}
}
참고자료
https://www.oracle.com/java/technologies/javase/8-whats-new.html
반응형
'JAVA' 카테고리의 다른 글
Java GC 동작 원리: 가비지 컬렉션이 메모리를 정리하는 법 (0) | 2025.04.02 |
---|---|
Java 객체 비교: equals()와 hashCode()로 보는 물리적 vs 논리적 동등성 (0) | 2025.03.31 |
Java Stream map vs flatMap 차이점과 활용법 (kotlin) (0) | 2025.03.04 |
Java 21 가상 스레드란? 기존 OS 스레드와의 차이점 정리 (0) | 2025.02.18 |
Java 프로그램 실행 과정, JVM 구조 이해하기 (0) | 2025.02.15 |