본문 바로가기

JAVA

Java, 어떻게 더 성장할까? – Brian Goetz가 말하는 ‘확장 가능한 언어’와 Witness 개념

728x90
반응형
728x170

Java는 오랫동안 기업용 애플리케이션 개발의 중심에 서 있었습니다. 하지만 시대가 바뀌면서, 단순히 안정성과 호환성을 유지하는 것만으로는 부족해지고 있습니다. 바로 언어의 성장 가능성(Growability) 이라는 새로운 철학이 주목받고 있는데요. 최근 JVM 서밋에서 Java 언어 아키텍트 Brian Goetz는 “Java 언어가 어떻게 진화할 수 있는가”라는 화두를 던졌습니다. 그는 단순한 기능 추가가 아닌, 언어 자체를 더 확장 가능하고 유연하게 만드는 방법을 제안했습니다.

그 중심에는 새로운 개념인 **‘Witnesses(증인)’**가 있습니다. 이 글에서는 Goetz가 제시한 철학과 Witness 개념, 그리고 Java의 미래 방향성에 대해 정리해보겠습니다.

반응형

Java 언어 진화의 철학: ‘Growable Language’

Brian Goetz의 발표 주제는 **“Growing the Java Language”**였습니다. 여기서 핵심은 새로운 기능을 당장 추가하는 것이 아니라, 언어가 스스로 확장할 수 있는 토대를 마련하는 것입니다.

  • 배경 철학: Goetz는 1998년 Guy Steele이 발표한 “Growing a Language” 논문에서 영감을 받았다고 밝혔습니다. Steele은 프로그래밍 언어가 사용자가 새로운 단어(기능)를 쉽게 추가할 수 있도록 ‘성장할 수 있는 구조’를 가져야 한다고 주장했습니다.
  • 기존 한계: Java는 라이브러리를 통해 기능 확장은 가능했지만, 언어 자체의 문법적 일관성을 유지하면서 확장하는 데는 한계가 있었습니다.

따라서 Goetz는 “기능을 더하는 것보다, 언어가 스스로 커질 수 있는 기반”을 만드는 방향을 강조했습니다.


Witnesses: Java의 새로운 개념

그렇다면 Witness란 무엇일까요?

Witness 개념 이해

  • 기존의 인터페이스(Interface) 는 “행동의 청사진” 역할을 했습니다. 클래스가 이를 구현하면 특정 메서드를 반드시 정의해야 했죠.
  • 하지만 Goetz는 “인터페이스만으로는 추상화에 한계가 있다”고 지적했습니다. 인터페이스는 클래스 정의에 직접 묶여 있기 때문입니다.

여기서 Witness가 등장합니다.

  • Witness는 특정 타입이나 타입 그룹이 어떤 행동 집합을 만족한다고 외부에서 증명하는 역할을 합니다.
  • 다시 말해, 타입 정의와 별개로 행동을 추상화할 수 있는 방법입니다.

예를 들어, 기존 Java에서는 다음과 같이 작성해야 했습니다:

public static final Comparator COMPARATOR =

하지만 Witness를 사용하면:

public static final witness Comparator COMPARATOR =

이렇게 간단히 선언할 수 있습니다. Witness는 Haskell의 타입 클래스(type class)나 C#의 shapes 개념과 유사합니다.


Witness로 열리는 새로운 기능들

Goetz는 Witness 개념이 단순히 이론에 그치지 않고, Java에 새로운 기능을 열어줄 수 있는 열쇠라고 말했습니다. 몇 가지 예시를 들어보겠습니다.

1. 새로운 수치 클래스 지원

  • 예: 16비트 부동소수점(Float16)
  • 기존에는 primitive 타입과 같은 성능을 갖춘 새로운 수치 타입을 정의하기 어려웠습니다. Witness를 통해 이런 타입을 자연스럽게 지원할 수 있습니다.

2. 연산자 활용 가능성

  • +, - 같은 연산자를 커스텀 타입에서도 활용할 수 있는 길을 엽니다.
  • 단, Goetz는 “연산자 오버로딩은 언어적 지뢰밭”이라며 신중한 접근이 필요하다고 강조했습니다.

3. 컬렉션 표현식(Collection Expressions)

  • C#처럼 간단히 시퀀스를 생성하는 문법을 Java에도 도입할 수 있는 가능성을 제시했습니다.

4. 생성 표현식(Creational Expressions)

  • 배열 초기화 시 null이나 0 대신 유효한 초기값(blank value) 을 지정할 수 있는 방법이 생깁니다.
  • Witness를 통해 클래스가 이러한 초기화 규칙에 참여할 수 있습니다.

Witness가 중요한 이유

Witness의 가치는 단순히 새로운 문법을 제공하는 것에 그치지 않습니다.

  1. 확장성: 새로운 기능을 언어 차원에서 도입하지 않아도, 라이브러리 차원에서 더 많은 것을 할 수 있게 됩니다.
  2. 일관성: foreach 문법처럼, Witness 기반 기능은 마치 언어에 내장된 것처럼 보일 수 있습니다.
  3. 지속 가능성: 새로운 기능을 일일이 언어 차원에서 설계할 필요 없이, Witness로 재사용 가능한 구조를 제공할 수 있습니다.

Java의 미래: 로드맵과 기대

Goetz는 이번 발표가 공식 제안(JEP) 은 아니라고 선을 그었습니다. 아직 아이디어 단계이지만, 언어 설계팀이 “편안하게 공유할 수 있는 이야기” 수준까지 정리된 상황이라고 밝혔습니다.

그럼에도 불구하고 Witness가 가져올 변화는 큽니다.

  • 개발자는 더 풍부한 제네릭 라이브러리와 조건부 동작을 설계할 수 있습니다.
  • 단기적으로는 수치 타입, 컬렉션, 배열 초기화 등 오랜 숙원이던 기능들을 해결할 수 있습니다.
  • 장기적으로는 Java가 단순히 기능을 추가하는 언어가 아닌, 스스로 성장할 수 있는 언어로 거듭날 수 있습니다.

728x90

Brian Goetz가 제시한 Witness 개념은 단순히 새로운 기능 하나가 아니라, Java 언어가 앞으로 나아갈 철학적 방향을 보여줍니다.

  • 기존의 인터페이스 한계를 넘어, 타입 행동을 외부에서 증명하는 방식
  • Java의 확장 가능성과 일관성을 동시에 잡는 접근
  • 장기적으로는 개발자들이 더 자유롭고 강력한 코드를 작성할 수 있는 기반

아직은 아이디어 단계이지만, 이 작은 변화가 Java의 미래를 크게 바꿀 수 있다는 점에서 의미가 큽니다.

https://thenewstack.io/java-language-architect-brian-goetz-on-how-java-could-evolve/?utm_campaign=trueanthem&utm_medium=social&utm_source=facebook&fbclid=IwY2xjawM-4YNleHRuA2FlbQIxMQABHjsQuGmv8p10SnFI34Azjjn9hDiEewY9FHxeG8uByHwax0yazCH-ZxKxrd7u_aem_Gf3GJyHooDkaalLEQs63zg

 

Java Language Architect Brian Goetz on How Java Could Evolve

Java architect Brian Goetz shares his long-term vision for a more "growable" language, introducing the concept of witnesses to enable powerful new features.

thenewstack.io

728x90
반응형
그리드형