‘범용 제네릭(universal generics)’은 자바 유형 변수가 기본형과 참조형을 포괄하도록 하여 다른 유형에서 코드를 쉽게 확장하거나 재사용할 수 있도록 지원한다.
오픈JDK 제안에 따르면 자바가 (이 언어를) 더 쉽게 사용할 수 있도록 하는 범용 제네릭을 지원할 계획이다.
범용 제네릭은 오픈JDK 커뮤니티에 올라온 3가지 제안을 통해 제공될 예정이다. 오라클은 이 제안들이 클래스의 유연성과 기본형의 성능을 결합해 자바 언어 및 JVM을 크게 변화시킬 것이라고 말했다. 3가지 JEP(JDK Enhancement Proposals)는 각각 서로 다른 기능을 지원하지만 앞서 언급한 이점을 얻으려면 세 가지 모두가 필요하다.
이중 핵심은 지난 2월 작성돼 10월 29일 업데이트된 JEP다. 해당 JEP의 내용은 다음과 같다. 자바 유형 변수가 두 유형에 적용될 수 있도록 해 일반 코드에서 참조 및 기본값 유형 처리를 통합한다는 것이다.
사용자-선언 기본 객체로 자바 객체 모델을 개선한다는 내용의 2번째 JEP는 전제 조건으로 사용된다. 세 번째 JEP는 기본형(int, double 등)을 객체와 통합한다. 이 밖에 추가 JEP를 통해 표준 라이브러리 업데이트를 통한 null 경고 해결, 라이브러리 전문화, JVM에서의 일반 API 런타임 특수화 등을 도입할 계획이다.
범용 제네릭 계획은 사용자-정의 기본형에서 바로 작동할 수 있도록 제네릭 API가 기본값 유형을 지원하게끔 권장하고 있다. 참조 유형도 지원된다. 이는 궁극적으로 자바 제네릭의 기본 동작이어야 하므로 기본값 유형이 자바 생태계에 완전히 참여할 수 있다고 제안서는 명시하고 있다.
자바에 범용 제네릭이 지원될 시기는 언급되지 않았다. 이를 구현하기까지는 몇 년이 걸릴 전망이다.
범용 제네릭은 플랫폼의 기존 제네릭 기능도 확장할 수 있다. 2004년에 도입된 자바 2 플랫폼 스탠다드 에디션 5.0은 언어와 플랫폼에 제네릭을 지원하여 개발자가 컬렉션에 저장하려는 항목을 식별하고, 반복자 유형을 안전하게 만들 수 있도록 했다. 하지만 2004년 제네릭이 반복되면서 개발자는 참조 유형에 대해서만 생성할 수 있었다.
한편 오늘날 제네릭을 주목하는 프로그래밍 언어는 자바뿐만이 아니다. 구글의 고 언어도 제네릭을 추가할 예정이다. ciokr@idg.co.kr