728x90
반응형
목차
JAVA 버전 별 특징 및 주요 추가 기능
자바는 지난 몇 년 동안 많은 변화와 발전을 거쳐 왔습니다. 각 버전은 더 나은 성능, 향상된 기능, 그리고 개발자들이 더 편리하게 작업할 수 있는 다양한 도구를 제공했습니다. 이번 블로그에서는 자바의 주요 버전들에 대해 특징과 추가된 기능을 상세하게 나누어 설명하겠습니다. 각 버전의 변화를 한눈에 파악할 수 있도록 구성했으니, 자바 개발자라면 꼭 확인해보세요! 😊
Java SE 1.0 (1996) 🚀
특징
- 자바는 처음 등장하면서 “Write Once, Run Anywhere”라는 슬로건을 내세우며 운영체제에 구애받지 않는 플랫폼 독립성을 제공했습니다.
- 자바 가상 머신(JVM)을 통해 자바 프로그램이 다양한 운영체제에서 실행될 수 있도록 지원했습니다.
추가된 기능
- JVM: 자바 프로그램을 실행할 수 있는 가상 환경을 제공.
- 최초 클래스 라이브러리: 자바에서 사용되는 다양한 표준 라이브러리가 제공되었습니다.
Java SE 1.1 (1997) 🆕
특징
- 자바 1.1에서는 성능 개선과 API 확장이 이루어졌습니다. 특히, 객체 지향적인 특성이 강화되었습니다.
추가된 기능
- JDBC(Java Database Connectivity): 자바 애플리케이션에서 관계형 데이터베이스와 연결할 수 있는 기능을 추가하여, 자바가 데이터베이스와의 통신을 원활하게 처리할 수 있게 되었습니다.
- 내부 클래스(Inner Classes): 클래스 내에서 다른 클래스를 정의할 수 있는 기능을 추가하여, 객체지향 설계를 더 유연하게 만들었습니다.
- RMI: 분산 객체 통신을 위한 원격 메서드 호출 기능이 추가되었습니다.
Java SE 1.2 (1998) 📦
특징
- 성능 향상과 함께 자바는 더 다양한 애플리케이션 개발에 적합해졌습니다.
- 자바는 이제 엔터프라이즈 애플리케이션을 위한 도구로도 자리잡기 시작했습니다.
추가된 기능
- Java Collections Framework: 리스트, 셋, 맵 등 다양한 데이터 구조를 효율적으로 관리할 수 있는 API를 도입했습니다. 개발자는 데이터 구조를 직접 구현할 필요 없이, 표준 라이브러리를 사용할 수 있게 되었습니다.
- Swing: 그래픽 사용자 인터페이스(GUI) 도구를 제공하여 자바 애플리케이션의 GUI 지원을 추가했습니다.
- JIT 컴파일러: 프로그램이 실행될 때 바이트코드를 네이티브 코드로 변환하는 기술로, 성능을 크게 향상시켰습니다.
Java SE 1.3 (2000) 🔧
특징
- 자바는 멀티미디어 및 고성능 애플리케이션 개발에 적합한 기능을 추가하여 발전했습니다.
추가된 기능
- Java Sound API: 자바에서 오디오 및 사운드 기능을 다룰 수 있는 기능을 추가했습니다. 이를 통해 멀티미디어 애플리케이션 개발이 가능해졌습니다.
- J2EE(Java 2 Platform, Enterprise Edition): 엔터프라이즈 애플리케이션을 위한 기능들이 포함되어 대규모 시스템 개발이 용이해졌습니다.
Java SE 1.4 (2002) 🔍
특징
- 자바는 보안과 성능 최적화에 중점을 두었으며, 여러 새로운 기능이 추가되었습니다.
추가된 기능
- 정규 표현식(Regular Expressions): 문자열 처리에 매우 유용한 정규 표현식 API를 추가하여, 복잡한 문자열 패턴을 쉽게 찾고 조작할 수 있게 되었습니다.
- NIO(New I/O): 비동기 I/O 처리 방식을 도입하여 대용량 데이터 처리 및 성능 향상에 크게 기여했습니다. NIO는 블로킹 I/O 방식에서 비동기식 I/O 방식으로의 전환을 가능하게 했습니다.
- Logging API: 애플리케이션 로그를 관리할 수 있는 API가 도입되었습니다.
Java SE 5 (2004) ✨
특징
- 자바는 제네릭, 메타데이터 어노테이션 등 다양한 기능을 도입하면서 언어의 강력함을 강조한 버전입니다.
추가된 기능
- Generics(제네릭 타입): 타입 안전성을 제공하기 위해 제네릭이 도입되었습니다. 제네릭을 사용하면, 컬렉션과 같은 데이터 구조를 사용할 때, 타입을 미리 지정할 수 있어 컴파일 시점에서 타입 오류를 방지할 수 있습니다.
- Metadata Annotations(어노테이션): 코드에 메타데이터를 추가할 수 있는 기능을 제공하여, 런타임 시에 해당 메타데이터를 활용할 수 있게 되었습니다. 예를 들어, @Override와 같은 어노테이션을 사용하여, 메서드 오버라이드를 명확히 할 수 있습니다.
- Enumerated Types(열거형): 고정된 상수 집합을 정의할 수 있는 enum 타입이 도입되어, 코드를 더 명확하고 간결하게 만들었습니다.
Java SE 6 (2006) ⚡
특징
- 성능 개선과 스크립팅 언어 통합이 주요 특징입니다.
추가된 기능
- Scripting API: Java에서 다른 스크립트 언어(예: JavaScript, Groovy 등)를 실행할 수 있도록 javax.script 패키지가 추가되었습니다. 이를 통해 자바 애플리케이션 내에서 동적인 스크립트 언어를 실행할 수 있게 되었습니다.
- JDBC 4.0: JDBC API가 개선되어, 데이터베이스와의 연결을 더 간단하게 할 수 있게 되었습니다. 예를 들어, 자동으로 커넥션을 닫는 기능과 Statement 객체에서 예외 처리를 개선하여 코드의 유지보수성을 높였습니다.
- JVM 성능 개선: 성능을 최적화하여 자바 애플리케이션이 더 빠르고 효율적으로 실행될 수 있도록 했습니다.
Java SE 7 (2011) 🖥️
특징
- 코드 간결성과 가독성을 높이기 위한 기능들이 도입되었습니다. 이 버전에서는 특히 NIO 2.0과 try-with-resources 문법이 주목받았습니다.
추가된 기능
- 다이아몬드 연산자(<> 타입 추론): 제네릭을 사용할 때, 타입을 추론할 수 있는 다이아몬드 연산자가 도입되어, 코드가 더 간결해졌습니다. 예를 들어, List<String> list = new ArrayList<>();와 같이 타입을 명시할 필요 없이 추론할 수 있게 되었습니다.
- NIO 2.0: 파일 시스템 관련 API가 추가되어, 파일 및 디렉토리 작업을 보다 효율적으로 처리할 수 있게 되었습니다. 예를 들어, 파일 시스템에 대한 비동기적인 작업을 처리할 수 있습니다.
- try-with-resources: 자원을 자동으로 관리할 수 있는 기능이 추가되었습니다. 이 구문을 사용하면 finally 블록에서 자원을 닫는 코드 없이도 자원 관리를 할 수 있습니다. 예를 들어, 파일 입출력 시 자동으로 파일을 닫을 수 있습니다.
Java SE 8 (2014) 🌟
특징
- 람다 표현식과 스트림 API 도입으로 자바에 함수형 프로그래밍의 요소가 도입되었습니다.
- 날짜/시간 API가 추가되어 날짜와 시간을 다루는 것이 더욱 직관적이 되었습니다.
추가된 기능
- 람다 표현식(Lambda Expressions): 함수형 프로그래밍의 패러다임을 자바에 도입하여, 익명 클래스 대신 람다 표현식을 사용하여 코드가 더 간결하고 직관적으로 변했습니다. 예를 들어, 컬렉션을 순회할 때 forEach 메서드를 사용하여 람다를 전달할 수 있습니다.
- Stream API: 컬렉션을 쉽게 처리할 수 있는 기능을 제공하여, 데이터를 필터링, 정렬, 변환 등을 함수형 스타일로 처리할 수 있게 되었습니다.
- java.time 패키지: 날짜 및 시간을 처리하는 새로운 API가 도입되었습니다. 이전의 Date와 Calendar 클래스의 단점을 개선하고, 더 직관적이고 간편하게 날짜/시간 연산을 처리할 수 있게 되었습니다.
Java SE 9 (2017) 🛠️
특징
- 모듈 시스템(Module System)이 도입되어, 대규모 프로젝트의 관리가 용이해졌습니다.
추가된 기능
- 모듈 시스템: Jigsaw 프로젝트를 통해 자바 애플리케이션을 모듈화할 수 있는 기능을 추가하여, 대형 프로젝트에서 모듈 간의 의존성을 명확하게 관리할 수 있게 되었습니다. 이로써 자바 애플리케이션을 더 모듈화하고, 유지보수성을 향상시킬 수 있었습니다.
- JShell: 자바 코드를 즉시 실행하고 테스트할 수 있는 인터프리터 도구가 도입되었습니다. 이를 통해 자바 코드를 빠르게 실험하고 학습할 수 있게 되었습니다.
- JVM 성능 개선: 자바 성능이 한층 향상되었습니다.
Java SE 10 (2018) ⚙️
특징
- 지역 변수 타입 추론(var)을 추가하여 코드가 더욱 간결해졌습니다.
추가된 기능
- var: var 키워드를 사용하여 변수의 타입을 컴파일러가 자동으로 추론하도록 하여 코드가 더 간결하고 읽기 쉬워졌습니다. 예를 들어, var list = new ArrayList<String>();와 같이 타입을 명시할 필요 없이 변수 선언이 가능해졌습니다.
- JVM 성능 개선: G1 Garbage Collector의 성능 개선과 더불어 메모리 관리가 더욱 최적화되었습니다.
Java SE 11 (2018) 🍃
특징
- 장기 지원(LTS) 버전으로 안정성과 보안성이 강화되었습니다.
추가된 기능
- HTTP Client API: 자바에서 HTTP 요청을 쉽게 처리할 수 있는 새로운 API가 추가되었습니다. 기존의 HttpURLConnection을 대신하여, HTTP 클라이언트를 더 직관적이고 효율적으로 사용할 수 있게 되었습니다.
- 장기 지원(LTS): 이 버전은 안정적이고 장기간 지원되는 버전으로, 기업 환경에서 널리 사용됩니다.
- Java EE 모듈 제거: Java EE 관련 API들이 JDK에서 분리되어, 이제는 Jakarta EE라는 이름으로 별도의 프로젝트로 관리되고 있습니다. 이를 통해 JDK는 경량화되고, 더 빠르게 발전할 수 있게 되었습니다.
Java SE 12-14 (2019-2020) 🔥
특징
- 실험적 기능들이 추가되었고, 여러 고급 기능들이 도입되었습니다.
추가된 기능
- Text Blocks: 여러 줄에 걸친 문자열을 다룰 때 코드가 더 간결해졌습니다. 예를 들어, 여러 줄 문자열을 사용할 때 Escape 문자 없이, 바로 그대로 문자열을 입력할 수 있게 되었습니다.
- Pattern Matching(Preview): instanceof를 사용할 때, 객체를 타입으로 검사하고 바로 변환하는 방식이 추가되었습니다. 코드가 더 깔끔하고 명확해졌습니다.
- Shenandoah GC.
- ZGC.
Java SE 15 (2020) ⚡
특징
- Records(Preview) 기능이 추가되어 간단한 데이터 클래스를 정의할 수 있게 되었습니다.
- ZGC(Zero Garbage Collector)가 개선되었습니다.
추가된 기능
- Records(Preview) : 데이터 클래스에 대한 간결한 표현을 위해 Record 타입이 도입되었습니다. record 키워드를 사용하여 불변 객체를 쉽게 정의할 수 있게 되었습니다.
- ZGC (Zero Garbage Collector): ZGC가 개선되어, 대규모 시스템에서의 가비지 컬렉션 성능이 향상되었습니다.
- JEP 376(JDK-Internal API 캡슐화).
Java SE 16 - 17 (2021) 🔥
특징
- JDK 내부 API 캡슐화가 강화되어 보안과 안정성이 향상되었습니다.
- Sealed Classes 도입으로 상속을 제한할 수 있게 되었습니다.
추가된 기능
- Sealed Classes : 상속을 제한할 수 있는 Sealed Classes가 도입되었습니다. 이를 통해, 특정 클래스가 다른 클래스들만 상속할 수 있게 제어할 수 있게 되었습니다.
- JEP 376(JDK 내부 API 캡슐화): 자바 내부 API의 캡슐화가 강화되어, 보안과 안정성이 향상되었습니다.
- JVM 성능 최적화.
Java SE 18-19 (2022) ⚡
특징
- 자바의 성능 향상과 기능 추가가 꾸준히 이루어졌습니다.
추가된 기능
- Virtual Threads: 자바에서 멀티스레딩을 더 효율적으로 처리할 수 있는 Virtual Threads가 도입되었습니다. 경량화된 스레드를 사용하여, 대규모 멀티스레딩 작업을 보다 효과적으로 처리할 수 있게 되었습니다.
- UTF-8 기본값: 문자 인코딩을 기본적으로 UTF-8로 처리하도록 하여, 다양한 언어와 문자셋을 다룰 때의 호환성 문제를 해결했습니다.
자바는 각 버전마다 지속적인 성능 향상과 새로운 기능 추가를 통해, 개발자가 더 효율적이고 안정적으로 작업할 수 있도록 지원하고 있습니다. 각 버전의 주요 기능들을 잘 활용하면 자바 애플리케이션의 품질과 성능을 크게 개선할 수 있습니다. 😊🚀
728x90
반응형
'이직&취업 > Java 기초 상식' 카테고리의 다른 글
JAVA thread safe 란? (12) | 2025.03.21 |
---|---|
브라우저에 www.naver.com을 입력하면??? (2) | 2025.03.19 |
Java Generic(제네릭) 란? (16) | 2025.03.18 |
JVM(Java Virtual Machine)과 자바 가비지 컬렉션(GC) (4) | 2025.03.17 |
String, StringBuffer, StringBuilder 비교 (5) | 2025.03.14 |