Java는 어디로 가고 있는가: Java 아키텍트가 말하는 Java의 미래
Java 언어 아키텍트인 브라이언 괴츠(Brian Goetz)가 2025년 3월 열린 JavaOne에서 발표한 <Where is the Java language going>라는 제목의 발표를 했습니다. 이 글은 그의 발표 내용을 바탕으로 주요 흐름과 철학을 정리한 것으로, 일부 핵심 문장은 원문 그대로 인용하였습니다. Java의 전반적인 지향점과 방향을 담고 있는데요. 참고로 JAVA25가 올해 9월에 나올 예정이고, 현재 자세한 각 버전별 신규 기능은 inside.java에서 볼 수 있습니다.
"Java는 이제 데이터를 더 잘 다루는 언어가 되려 합니다."
Java 언어 아키텍트 브라이언 괴츠는 이렇게 말하며, Java 언어가 나아가고 있는 새로운 방향성을 소개했습니다. 그에 따르면, Java는 객체지향 중심 언어에서 데이터 지향 프로그래밍(data-oriented programming) 언어로의 진화를 추구하고 있습니다. 이번 발표는 특히 두 가지 주요 프로젝트—Amber와 Valhalla—에 초점을 맞췄습니다.
Project Amber: 개발자의 생산성을 조금 더 좋게
Amber 프로젝트는 Java의 언어 문법을 현대화하고, 불필요한 반복 작업을 줄이며, 개발자의 생산성을 높이는 데 중점을 둔 프로젝트입니다. 괴츠는 이를 다음과 같이 설명합니다.
Project Amber는 ‘언어의 형식(ceremony)을 적정 수준으로 조정한다(right-sizing language ceremony)’는 광범위한 목표를 가지고 있습니다.
Amber는 작은 문법 개선부터 시작해, record
, sealed Types
, pattern Matching
같은 기능을 포함한 장기적인 기능 로드맵을 구성하고 있습니다.

Record: 명확한 데이터 모델링
Java 16부터 도입된 record
는 단순히 보일러플레이트 코드를 줄이기 위한 도구가 아닙니다. 괴츠는 말합니다.
record
의 목적은 깔끔한 의미론적 방법으로 데이터를 모델링하는 것입니다.
record
는 상태를 기반으로 API, 생성자, 접근자 등을 자동으로 유추하여 구현합니다. 무엇보다 중요한 점은, record
는 “데이터 그 자체”이며, 사용자는 의도적으로 API 설계를 단순화함으로써 얻는 이점을 누릴 수 있다는 것입니다.
Sealed Types: 선택지를 통제하는 도구
sealed
클래스는 상속할 수 있는 하위 클래스를 명시적으로 제한할 수 있는 기능입니다. 이는 API의 보안성과 예측 가능성을 높이며, 패턴 매칭 시 모든 경우를 다루는지(exhaustiveness) 컴파일러가 검증할 수 있게 합니다.
Sealed class는 ‘final’과 유사하지만, ‘이 클래스들만 나를 상속할 수 있다’는 더 유연한 제약을 제공합니다.
Pattern Matching: 데이터를 선언하는 새로운 방식
patter matching
은 Java에서 조건부 타입 캐스팅 + 추출을 하나의 연산으로 처리할 수 있게 해 줍니다. 예를 들어,
if(x instanceof String s){
// s는 자동으로 String 타입으로 캐스팅된 변수
}
또한 switch
구문도 이에 맞게 대대적으로 개선되어, 타입 기반 분기, 가드 절(guard clause
), 표현식으로 사용 등 다양한 방식으로 활용이 가능해졌습니다.
static int eval(Expr e){
return switch(e){
case SumExpr(var a,var b)->eval(a) + eval(b);
case ProdExpr(var a,var b) -> eval(a) * eval(b);
case NegExpr(var a) -> -eval(a);
case ConstExpr(var i) -> i;
};
}
이는 Java에서 분기마다 사용되어 피로감을 주던 instanceof
의 사용성을 개선하고, 별도의 추출 과정이 반복적으로 발생하지 않도록 만들고자 하는 Java의 새로운 철학을 보여줍니다.
더 나아가, record
와 함께 활용해 분해(deconstruct)와 생성(constuct)이 대칭적으로 활용되도록 할 수 있습니다.
이는 “값을 생성하는 것(construct)”과 “값을 분해하는 것(deconstruct)”을 대칭적인 구조로 구성하려는 Java의 새로운 철학을 보여줍니다.
patter matching
은 추상화로 인해 생긴 정보 손실을 구조적으로 복원할 수 있는 수단을 제공합니다.
Project Valhalla: "클래스처럼 코딩하고, 배열처럼 동작하라"
Valhalla는 Java의 객체 메모리 구조, 기본 타입과 참조 타입의 통합, 성능 최적화를 목표로 한 대형 프로젝트입니다. 이 프로젝트의 핵심은 다음 세 가지입니다.
1. Value Class (값 클래스) – JEP 401
값 클래스는 객체의 정체성(identity)을 포기함으로써 VM이 객체를 더 효율적으로 다룰 수 있게 합니다. 예를 들어 Point
라는 클래스를 값 클래스로 선언하면, 실제로는 x, y 필드만 레지스터나 연속된 메모리 공간에 직접 배치될 수 있습니다.
클래스를 값 클래스(
value class
)로 선언하면 VM은 이것을 더 자유롭게 복사하고, 분해하고, 재구성할 수 있습니다.
2. Null-restricted types
null
가능성을 명시적으로 표현할 수 있도록 하여, 컴파일러의 검사를 강화하고 런타임 오류를 줄이는 기능입니다. Kotlin의 String?
, String!
과 유사한 개념입니다.

Java는 이제 데이터 중심 언어가 되려 한다
괴츠는 다음과 같이 선언합니다.
Java는 원래 객체 지향 프로그래밍에 최적화되어 있었지만, 이제는 평범한 데이터(plain data)를 다루는 데 더 강력해질 필요가 있습니다.
record
는 데이터의 집합(AND 관계)을 표현하고,sealed types
는 선택지(OR 관계)를 모델링하며,pattern matching
은 이 데이터를 분해하고 활용할 수 있게 해 줍니다.
이 세 가지를 합치면 함수형 언어에서 흔히 말하는 대수적 데이터 타입(algebraic data types)의 표현이 Java에서도 가능해집니다.
마치며: Java는 변하고 있다
Java의 새로운 기능들은 단순한 문법 개선을 넘어서, 현대적인 프로그래밍 환경에 맞춰 언어 자체의 철학적 기반을 변화시키고 있습니다. 발표를 마무리하며 괴츠는 다음과 같이 말했습니다.
이제 우리는 데이터를 구성하는 방법뿐만 아니라, 데이터를 분해하는 방식도 동일하게 표현할 수 있기를 원합니다.
개발자들이 보다 선언적이고 오류에 강한 방식으로 코드를 작성할 수 있도록, Java는 더 나은 언어로 진화하고 있습니다. 데이터 중심 시대에 어울리는 Java의 미래를 기대해도 좋을 듯합니다.
*이 내용은 JavaOne 2025에서 Brian Goetz가 발표한 세션을 바탕으로 정리되었습니다. 공식 영상과 슬라이드는OpenJDK 및 Oracle Dev 사이트에서 확인하실 수 있습니다.