─━ IT ━─

🚀 JDK 초기 역사: 자바의 탄생과 기반 다지기 (1.0 ~ 7)

DKel 2025. 10. 7. 20:44
반응형

JDK의 초기 버전들은 자바를 시장에 확립하고, 엔터프라이즈 환경에서 필수적인 객체 지향 언어로서의 기반을 다지는 데 주력했습니다.

1. JDK 1.0 (1996): 자바의 탄생

  • 핵심: 자바 언어의 최초 버전으로, 모든 것의 시작점이었습니다.
  • 주요 특징: 자바 가상 머신(JVM), 애플릿(Applets), 기본 API(I/O, 네트워킹 등)가 포함되었습니다.

2. J2SE 1.2 (1998): 플랫폼화와 Swing의 등장

  • 핵심: 자바 플랫폼의 기틀을 마련했습니다. 버전 명칭이 J2SE(Java 2 Standard Edition)로 변경되었습니다.
  • 주요 특징:
    • 컬렉션 프레임워크(Collections Framework): List, Set, Map 등 현대적인 데이터 구조를 도입하여 개발 효율성을 높였습니다.
    • Swing: AWT를 대체하는 풍부한 그래픽 사용자 인터페이스(GUI) 라이브러리가 도입되었습니다.

3. J2SE 5.0 (2004): 언어의 대변신

  • 핵심: 자바 언어 자체에 대규모 변화를 가져온 주요 릴리스입니다.
  • 주요 특징:
    • 제네릭스(Generics): 타입 안정성을 강화하고, 컴파일 시점에 오류를 포착할 수 있게 했습니다. (예: List<String>)
    • 어노테이션(Annotations): 메타데이터를 코드에 추가하는 기능을 제공하여 JUnit, Spring 등 현대 프레임워크 개발의 기반이 되었습니다.
    • Autoboxing/Unboxing: 기본 타입과 래퍼 클래스 간의 변환을 자동화하여 코드가 간결해졌습니다.

4. Java SE 7 (2011): Project Coin과 성능 개선

  • 핵심: 언어의 사용 편의성을 개선하고, JVM의 안정성을 높이는 데 초점을 맞췄습니다.
  • 주요 특징:
    • Project Coin: 여러 가지 소규모 언어 개선 사항이 포함되었습니다.
      • 다이아몬드 연산자 (<>): 제네릭 타입 추론이 가능해져 코드가 더 간결해졌습니다.
      • try-with-resources: 자원(파일, 소켓 등) 관리를 자동화하여 메모리 누수를 방지했습니다.
    • NIO 2.0: 새로운 파일 I/O API를 도입하여 파일 시스템 접근을 개선했습니다.

👑 현대 자바의 도약: JDK 8의 혁명과 모듈화 (8 ~ 11 LTS)

자바 역사상 가장 중요한 변화는 JDK 8JDK 9에서 일어났으며, 이는 자바를 멀티코어 시대에 적합한 언어로 탈바꿈시켰습니다.

5. Java SE 8 (2014): 함수형 프로그래밍 시대 개막 (LTS)

  • 핵심: 자바를 객체 지향뿐만 아니라 함수형 프로그래밍 패러다임까지 수용하는 언어로 진화시킨 역사적인 릴리스입니다.
  • 주요 특징:
    • 람다 표현식(Lambda Expressions): 익명 함수를 간결하게 표현할 수 있게 되어 코드가 짧고 가독성이 높아졌습니다.
    • 스트림 API(Stream API): 컬렉션의 데이터를 선언적이고 함수형 스타일로 처리할 수 있게 되어 병렬 처리와 대용량 데이터 관리가 용이해졌습니다.
    • Default 메서드: 인터페이스에 구현 코드를 추가할 수 있게 되어 기존 코드를 깨지 않고 라이브러리를 확장할 수 있는 유연성을 제공했습니다.

6. Java SE 9 (2017): 모듈화 혁명 (Jigsaw)

  • 핵심: 자바 플랫폼의 규모를 줄이고 유지보수성을 높이는 **모듈 시스템(Jigsaw Project)**을 도입했습니다.
  • 주요 특징:
    • 자바 플랫폼 모듈 시스템 (JPMS): JVM, 자바 API, 애플리케이션 코드를 독립적인 모듈로 분리하여 플랫폼의 크기를 줄이고, 필요한 모듈만 포함하는 런타임 이미지 생성을 가능하게 했습니다.
    • JShell: 상호 작용하는 REPL(Read-Eval-Print Loop) 툴이 도입되어 간단한 코드 테스트나 학습이 용이해졌습니다.

7. Java SE 11 (2018): LTS 버전과 미래 지향적 정리

  • 핵심: 릴리스 주기가 6개월로 단축된 후 발표된 첫 번째 장기 지원(LTS) 버전입니다.
  • 주요 특징:
    • HTTP Client API: 기존의 레거시 HttpURLConnection을 대체하는 현대적인 비동기 HTTP 클라이언트가 표준으로 채택되었습니다.
    • 지역 변수 타입 추론 (var in Lambda): 람다 표현식의 매개변수에서도 var 키워드를 사용하여 타입 추론을 할 수 있게 되었습니다.
    • 모듈 시스템 정착: JDK 9에서 시작된 모듈화가 안정화되고, JavaFX와 같은 일부 엔터프라이즈 모듈이 JDK에서 제거되어 별도의 라이브러리로 분리되었습니다.

📈 현대 자바의 빠른 발전: 6개월 주기의 혁신 (17 LTS 이상)

JDK 11 이후, 자바는 6개월마다 새로운 기능과 성능 개선을 제공하는 빠른 주기를 유지하고 있습니다.

8. Java SE 17 (2021): 최신 LTS와 패턴 매칭의 강화

  • 핵심: 모던 자바의 표준을 제시하는 최신 LTS 버전으로, 개발 생산성을 높이는 문법적 개선에 집중했습니다.
  • 주요 특징:
    • Sealed Classes (봉인된 클래스): 어떤 클래스가 자신을 상속하거나 인터페이스를 구현할 수 있는지를 명시적으로 제한할 수 있게 되어 상속 구조의 제어가 가능해졌습니다.
    • Switch용 패턴 매칭(Pattern Matching for Switch): switch 표현식과 문장에서 패턴 매칭을 도입하여 코드를 더 간결하고 안전하게 만들었습니다. (이후 버전에서 완성됨)

9. 최신 버전 (JDK 21 LTS 이후): 미래를 위한 준비

  • 핵심: 가상 스레드, 외부 함수 및 메모리 API, 패턴 매칭 등 혁신적인 기능을 도입하며 동시성(Concurrency)과 상호 운용성을 극대화하고 있습니다.
  • 주요 특징 (Preview/Sealed):
    • Project Loom (Virtual Threads): 비용이 저렴한 가상 스레드를 도입하여 동시성 프로그래밍의 복잡성을 획기적으로 낮추고, 대규모 애플리케이션의 처리량을 높이는 데 집중하고 있습니다.
    • Record Classes: 데이터 운반용 클래스(DTO, VO)를 간결하게 정의할 수 있는 문법을 도입했습니다.
    • Foreign Function & Memory API (FFM API): 자바 외부의 코드(예: C 라이브러리)와 메모리를 안전하고 효율적으로 접근할 수 있는 표준 방식을 제공합니다.

📊 요약: 자바 버전 진화의 의미

자바의 버전별 진화는 다음과 같은 주요한 목표를 향해 나아가고 있습니다.

  1. 개발 생산성 향상: 람다, var, Record 등 간결한 문법을 지속적으로 도입하여 개발자가 더 적은 코드로 더 많은 작업을 할 수 있게 돕습니다.
  2. 동시성 및 성능 극대화: 가상 스레드와 같은 혁신을 통해 멀티코어 환경에서의 성능을 극대화하고, 대규모 트래픽 처리를 용이하게 합니다.
  3. 안전성 및 유지보수성: 모듈 시스템, Sealed Class 등을 통해 대규모 애플리케이션의 구조적 복잡성을 관리하고 안정성을 높이는 데 주력하고 있습니다.

따라서 현대 자바 개발자라면 JDK 8의 함수형 기능과 JDK 11/17 LTS의 모듈 시스템 및 최신 문법(가상 스레드 등)에 대한 이해는 필수적입니다.

반응형