🚀   70세 이전에 한 모든 일은 신경 쓸 가치가 없다. - 호쿠사이

JEP: Java의 미래를 이끄는 힘

2024.08.13
13분

JEP: Java의 미래를 이끄는 힘

Java는 25년이 넘는 역사를 가진 프로그래밍 언어이자 플랫폼으로, 전 세계 수백만 명의 개발자에게 사랑받고 있습니다. Java의 장수와 성공은 그 안정성과 성능뿐만 아니라, 끊임없이 발전하고 적응하는 능력 덕분입니다. 이 발전의 중심에는 JEP(Java Enhancement Proposal)라는 시스템이 있습니다.

JEP는 JDK Enhancement Proposal의 약자로, Java Development Kit(JDK)에 대한 기능 개선, 추가 및 변경 사항을 공식적으로 제안하고 관리하는 프로세스입니다. 이 글에서는 JEP가 무엇인지, 어떻게 JEP 프로세스에 참여하고 활용할 수 있는지에 대해 알아보겠습니다.

JEP란 무엇인가?

JEP는 Java의 미래를 설계하는 청사진입니다. Java의 새로운 기능이나 개선 사항이 필요할 때, 개발자들은 JEP를 통해 자신의 아이디어를 제안합니다. JEP는 Oracle의 Java 팀과 OpenJDK 커뮤니티에 의해 관리되며, Java 생태계 전반에 걸친 중요한 의사결정 과정에 영향을 미칩니다.

JEP는 새로운 기능을 제안하거나, 기존 기능을 개선하며, 때로는 JDK의 정책을 변경하는 등 다양한 역할을 합니다. 예를 들어, JDK 17에서 도입된 패턴 매칭 기능은 JEP 394를 통해 제안된 것입니다.

JEP의 주요 목적

  • 기능 제안: 새로운 기능을 JDK에 도입하기 위한 아이디어를 제안합니다.
  • 기존 기능 개선: 이미 존재하는 기능을 개선하거나 확장하는 방법을 제안합니다.
  • 기술 채택: 새로운 기술이나 라이브러리의 채택을 제안할 수 있습니다.
  • 정책 변경: JDK의 정책, 프로세스 또는 규칙에 대한 변경 사항을 제안합니다.

JEP의 생명 주기

JEP는 다음과 같은 단계로 진행됩니다:

  1. 초기 제안: 개발자는 자신의 아이디어를 JEP로 작성하여 공개합니다. 이 단계에서는 제안된 아이디어의 목적, 필요성, 구현 방법 등을 설명합니다.

  2. 검토와 피드백: JEP는 OpenJDK 커뮤니티와 Oracle의 전문가들에 의해 검토됩니다. 이 과정에서 여러 번의 피드백을 받으며 수정될 수 있습니다.

  3. 타겟 결정: JEP가 JDK의 특정 버전에 포함될지 여부가 결정됩니다. 예를 들어, JEP 409는 JDK 17에 포함되었습니다.

  4. 구현: 제안된 기능이 실제로 개발됩니다. 이 단계에서는 기능이 코드로 구현되고, 다양한 테스트를 통해 안정성을 검증합니다.

  5. 릴리즈: 기능이 최종적으로 JDK의 정식 릴리즈에 포함됩니다. 이제 개발자들은 새로운 기능을 사용할 수 있습니다.

JEP의 구조

  • JEP 번호: 각 제안서는 고유한 번호로 식별됩니다.
  • 제목: JEP의 목적을 설명하는 간략한 제목이 포함됩니다.
  • 요약: 제안된 변경 사항에 대한 간략한 요약이 포함됩니다.
  • 동기: 제안된 변경 사항의 이유와 필요성을 설명합니다.
  • 설명: 변경 사항의 세부사항과 기술적 구현 방안을 설명합니다.
  • 위험과 대안: 제안된 변경 사항이 실패할 경우의 위험 및 고려할 수 있는 대안들을 설명합니다.

JEP의 예

  • JEP 101: Generalized Target-Type Inference로, 컴파일러가 제네릭 코드의 타입을 더 잘 추론할 수 있도록 한 JEP. (JDK 8)

  • JEP 104: Annotations on Java Types로, 타입 주석을 지원하여 더 정교한 타입 시스템을 구축한 JEP. (JDK 8)

  • JEP 107: Bulk Data Operations for Collections (Streams)로, 컬렉션을 처리할 수 있는 스트림 API를 도입한 JEP. (JDK 8)

  • JEP 108: Date and Time API로, 새로운 날짜와 시간 API(java.time 패키지)를 도입하여 기존 API의 문제를 해결한 JEP. (JDK 8)

  • JEP 128: Enhance Core Libraries with Lambda로, 람다 표현식을 활용하여 핵심 라이브러리를 개선한 JEP. (JDK 8)

  • JEP 254: String 클래스를 최적화하여 메모리 사용량을 줄이고 성능을 개선한 JEP. (JDK 9)

  • JEP 286: var 키워드를 통한 지역 변수 타입 추론 기능을 제안한 JEP. (JDK 10)

  • JEP 359: 데이터 클래스인 레코드를 도입한 JEP. (JDK 14:미리 보기, JDK 16:정식 도입)

  • JEP 305: instanceof 연산자에 패턴 매칭 기능을 추가한 JEP. (JDK 14:미리 보기, JDK 16:정식 도입)

  • JEP 361: switch 표현식을 도입하여 switch 문을 간결하게 만든 JEP. (JDK 12:미리 보기, JDK 14:정식 도입)

  • JEP 392: jpackage 도구를 통해 Java 애플리케이션을 독립 실행형 패키지로 만들 수 있게 한 JEP. (JDK 16)

논의 중인 JEP 예시 (2024년 8월 현재)

JEP 8303099nullablenon-nullable 유형을 명확하게 구별하여 Java의 유형 시스템을 개선하기 위해 Null-Restricted Types라는 개념을 제안하고 있습니다. 이 기능은 개발자에게 null 값을 가질 수 없는 변수, 필드 및 메서드 반환 유형을 선언할 수 있도록 하여 NullPointerException(NPE)을 줄이는 것을 목표로 합니다.

주요 특징:

  • Null 제한 유형: 이 제안은 null 제한 유형(예: String!)을 선언하기 위한 구문을 도입하여 이러한 유형에 null이 할당되지 않도록 합니다. 이러한 유형에 null을 할당하려고 하면 컴파일 타임 또는 런타임 오류가 발생합니다.
  • Nullness 변환 확대 및 축소: 이 제안은 null 허용(Foo?) 유형과 null 허용 불가(Foo!) 유형 간의 변환을 허용합니다. 확대 변환(null 허용 불가에서 null 허용 불가로)은 암묵적으로 발생하는 반면, 축소 변환(null 허용에서 null 허용 불가로)은 런타임 검사를 포함하므로 null이 있는 경우 NPE가 발생할 수 있습니다.
  • 런타임 검사: 시스템은 런타임에 null 제한을 적용하는데, 여기서 부적절한 변환은 null 제한 유형이 관련될 때 NullPointerException 또는 ArrayStoreException과 같은 예외를 트리거할 수 있습니다.

JEP 활용하기

JEP를 활용하는 방법은 여러 가지가 있습니다. Java 개발자라면 JEP 프로세스를 이해하고, 자신의 프로젝트에 적용할 수 있는 최신 기능을 적극적으로 학습하는 것이 중요합니다. 이를 위해 다음과 같은 방법을 고려해볼 수 있습니다:

  • JEP 읽기: JEP의 내용은 OpenJDK의 JEP 인덱스에서 확인할 수 있습니다. 여기서 최신 JEP와 과거 JEP를 모두 찾아볼 수 있으며, 각 JEP의 상세 내용을 학습할 수 있습니다.

  • 새로운 기능 실험: 새로운 JEP가 포함된 JDK의 초기 버전을 설치하고, 실험해 봅니다. 예를 들어, JEP 394의 패턴 매칭 기능을 프로젝트에 도입해 보는 것입니다.

  • 커뮤니티 참여: OpenJDK 커뮤니티에 참여하여 JEP에 대한 의견을 나누고, 피드백을 제공할 수 있습니다. 이는 Java 생태계에 기여하는 훌륭한 방법입니다.

JEP 작성 및 참여하기

다음의 과정을 통해 Java의 미래에 직접 기여할 수 있습니다. JEP를 작성하고 제안하는 절차는 다음과 같습니다.

  1. 아이디어 발굴: JDK에서 개선이 필요하거나 새로운 기능이 도입되어야 한다고 생각되는 부분을 찾아봅니다. 이는 코드 사용 경험, 다른 언어에서의 영감, 또는 커뮤니티의 요구사항일 수 있습니다.

  2. JEP 초안 작성: 아이디어가 구체화되면, JEP 초안을 작성하세요. 여기에는 제안 배경, 구현 계획, 예상되는 영향 등을 포함해야 합니다. OpenJDK의 JEP 템플릿을 활용하면 도움이 됩니다.

  3. 커뮤니티에 공유: 작성된 JEP 초안을 OpenJDK 커뮤니티에 공유하고, 피드백을 받으세요. 이 과정에서 제안이 수정되고, 더 나은 방향으로 발전할 수 있습니다.

  4. 공식 제안: 피드백을 반영한 최종 JEP를 OpenJDK의 공식 제안으로 제출합니다 . 이 제안은 Java 커뮤니티의 널리 쓰이는 도구에 반영될 수 있습니다.

  5. 구현 및 배포: JEP가 채택되면 실제 구현에 참여하거나, 다른 개발자들이 구현한 코드를 테스트하고 피드백을 제공할 수 있습니다.

마무리

JEP는 Java의 발전을 이끄는 핵심 도구입니다. JEP를 통해 Java 커뮤니티는 새로운 기능과 개선 사항을 제안하고, 이를 통해 언어와 플랫폼이 끊임없이 진화할 수 있습니다. Java 개발자로서 JEP에 대해 이해하고, 이를 활용하여 최신 기술을 습득할 수 있습니다. 아이디어가 있다면 이해하는 것을 넘어 Java의 미래에 기여할 수 있는 기회도 열려있습니다.


관련 링크