자바의 연대표
자바는 1996년 1월 23일에 처음 출시되어, 27년의 기간 동안 많은 변화를 거치며 지금도 지속적인 변화가 일어나고 있는 언어입니다.
자바의 발전 역사:
- 1996년: 자바 1.0 출시
- 1997년: 자바 1.1 출시, Swing GUI 라이브러리 도입
- 1998년: 자바 1.2 출시, JavaBeans, JDBC 등 새로운 기능 도입
- 2000년: 자바 2 출시, J2SE, J2EE, J2ME 등 플랫폼별 에디션 출시
- 2004년: 자바 5.0 출시, 제네릭, 향상된 for 루프 등 새로운 기능 도입
- 2006년: 자바 6.0 출시, varargs, enum 등 새로운 기능 도입
- 2010년: 자바 7.0 출시, NIO.2, try-with-resources 등 새로운 기능 도입
- 2011년: 자바 7u40 출시, JavaFX 2.0 도입
- 2014년: 자바 8.0 출시, 람다 표현식, 스트림 API 등 새로운 기능 도입
- 2017년: 자바 9.0 출시, 모듈 시스템, JShell 등 새로운 기능 도입
- 2018년: 자바 10.0 출시, Local-Variable Type Inference 등 새로운 기능 도입
- 2019년: 자바 11.0 출시, LTS 버전, HTTP/2 Client API 등 새로운 기능 도입
- 2020년: 자바 12.0 출시, Switch Expressions, Text Blocks 등 새로운 기능 도입
- 2021년: 자바 13.0, 14.0, 15.0, 16.0, 17.0 출시, Records, Sealed Classes, Pattern Matching 등 새로운 기능 도입
- 2022년: 자바 18.0, 19.0 출시, Shenandoah GC, Virtual Threads 등 새로운 기능 도입
- 2023년: 자바 20.0, 21.0 출시, Vector API, Loom 등 새로운 기능 도입
자바의 주요 특징:
- 객체 지향: 자바는 객체 지향 프로그래밍 언어로, 코드 재사용성과 유지 관리성을 향상시킵니다.
- 플랫폼 독립성: 자바는 JVM(Java Virtual Machine)이라는 가상 머신을 통해 실행되므로, 운영 체제에 독립적으로 실행될 수 있습니다.
- 강력한 보안: 자바는 강력한 보안 기능을 제공하여 안전한 애플리케이션 개발을 가능하게 합니다.
- 풍부한 라이브러리: 자바는 다양한 작업을 수행할 수 있는 풍부한 표준 라이브러리를 제공합니다.
모던 자바
모던 자바는 자바 8 이후 버전을 의미하며, 기존 자바에 비해 다음과 같은 특징을 가지고 있습니다.
1. 함수형 프로그래밍 도입:
- 람다 표현식, 스트림 API 등 함수형 프로그래밍 기능 도입으로 코드 간결성 및 표현력 향상
- 함수형 프로그래밍의 장점을 활용하여 더욱 효율적이고 유지 관리가 용이한 코드 작성 가능
2. 새로운 API 및 기능 도입:
- Records, Sealed Classes, Pattern Matching 등 새로운 API 및 기능 도입으로 개발 생산성 향상
- 새로운 기능을 활용하여 더욱 간결하고 안전한 코드 작성 가능
3. 지속적인 발전:
- 매년 새로운 버전 출시, 최신 기술 및 트렌드 반영
- 최신 버전을 사용하여 최신 기술을 활용한 개발 가능
자바 5~17 까지의 버전 별 특징
자바 5 (2004년 출시)
| 기능 | 설명 | 코드 예시 |
|---|---|---|
제네릭 | 데이터 타입을 지정하여 코드 재사용성 향상 | List<String> list = new ArrayList<>(); |
향상된 for 루프 | 컬렉션의 요소를 쉽게 반복 처리 | for (String item : list) { System.out.println(item); } |
자동 언박싱/박싱 | 기본 타입과 Wrapper 클래스 간 자동 변환 | Integer wrapper = 10; int primitive = wrapper; |
Enum | 열거형을 사용하여 상수 집합 정의 | enum Color { RED, GREEN, BLUE } |
어노테이션 | 메타데이터를 코드에 추가 | @Override public void methodName() {} |
자바 6 (2006년 출시)
| 기능 | 설명 | 예시 |
|---|---|---|
varargs | 가변 길이 인수를 허용하는 메서드 정의 | void printNames(String... names) { for (String name : names) { System.out.println(name); } } |
enum | 열거형을 사용하여 상수 집합 정의 | enum Color { RED, GREEN, BLUE } |
정적 메서드 import | 클래스 이름 없이 정적 메서드 호출 | import static java.lang.Math.max; int max = max(10, 20); |
어노테이션 | 메타데이터를 코드에 추가 | @Override public void print() {} |
자바 7 (2011년 출시)
| 기능 | 설명 | 코드 예시 |
|---|---|---|
try-with-resources | 자원 자동 해제 | try (BufferedReader br = new BufferedReader(new FileReader(path))) { ... } |
다이아몬드 연산자 | 제네릭 인스턴스 생성시 타입 생략 | Map<String, List<String>> map = new HashMap<>(); |
멀티캐치 | 여러 예외를 하나의 catch 블록에서 처리 | `try { … } catch (IOException |
자바 8 (2014년 출시)
| 기능 | 설명 | 코드 예시 |
|---|---|---|
람다 표현식 | 간단한 코드 블록을 표현하는 문법 | list.forEach(e -> System.out.println(e)); |
스트림 API | 컬렉션의 요소를 처리하는 API | list.stream().filter(e -> e > 10).forEach(System.out::println); |
Optional 클래스 | null 처리를 위한 컨테이너 클래스 | Optional<String> optional = Optional.ofNullable(value); |
인터페이스의 default 메서드 | 인터페이스에 구현된 메서드를 추가 | interface Vehicle { default void print() { System.out.println("I am a vehicle!"); } } |
자바 9 (2017년 출시)
| 기능 | 설명 | 코드 예시 |
|---|---|---|
모듈 시스템 | 코드를 모듈로 분할하여 관리 | module my.module { requires java.sql; } |
스트림 API 개선 | 추가된 스트림 연산 | Stream.of("a", "b", "c").takeWhile(s -> !s.equals("b")).forEach(System.out::println); |
JShell | 대화형 Java 쉘 | jshell> System.out.println("Hello, World!"); |
자바 10 (2018년 출시)
| 기능 | 설명 | 코드 예시 |
|---|---|---|
Local-Variable Type Inference | 로컬 변수에 대한 타입 추론 (var) | var list = new ArrayList<String>(); |
복사본 변경 불가능 컬렉션 | 불변 컬렉션 생성 메서드 | var unmodifiableList = List.copyOf(list); |
자바 11 (2018년 출시)
| 기능 | 설명 | 코드 예시 |
|---|---|---|
HTTP 클라이언트 API 강화 | 새로운 HTTP 클라이언트 API | HttpClient httpClient = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder().uri(URI.create("http://example.com")).build(); httpClient.send(request, BodyHandlers.ofString()); |
String 클래스 개선 | String 클래스에 새로운 메서드 | String result = " ".isBlank() ? "Blank" : "Not Blank"; |
자바 12 (2019년 출시)
| 기능 | 설명 | 코드 예시 |
|---|---|---|
Switch 표현식 | switch 문법 개선 | String day = "MONDAY"; switch (day) { case "MONDAY" -> System.out.println("월요일"); case "TUESDAY" -> System.out.println("화요일"); default -> System.out.println("다른 요일"); } |
자바 13 (2019년 출시)
| 기능 | 설명 | 코드 예시 |
|---|---|---|
Text Blocks | 다중 줄 문자열 표현 | String text = """ Hello, World! """; |
Pattern Matching for instanceof | instanceof 연산자 개선 | if (obj instanceof String s) { System.out.println(s.toUpperCase()); } |
자바 14 (2020년 출시)
| 기능 | 설명 | 코드 예시 |
|---|---|---|
Records | 데이터 클래스를 위한 새로운 타입 | record Person(String name, int age) {} |
instanceof 패턴 매칭 | instanceof 연산자 개선 | if (obj instanceof String s) { System.out.println(s.toUpperCase()); } |
자바 15 (2020년 출시)
| 기능 | 설명 | 코드 예시 |
|---|---|---|
Sealed Classes | 클래스 상속 제한 지정 | sealed class Shape permits Circle, Square {} |
자바 16 (2021년 출시)
| 기능 | 설명 | 코드 예시 |
|---|---|---|
Pattern Matching in switch | switch 문에서 패턴 매칭 | switch (obj) { case Integer i -> System.out.println("Integer"); case String s -> System.out.println("String"); default -> System.out.println("Unknown"); } |
자바 17 (2021년 출시)
| 기능 | 설명 | 코드 예시 |
|---|---|---|
Sealed Classes (GA) | 클래스 상속 제한 지정 | sealed class Shape permits Circle, Square {} |