Home 모던 자바 (1) 자바의 발전 과정
Post
Cancel

모던 자바 (1) 자바의 발전 과정

자바의 연대표

image

자바는 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컬렉션의 요소를 처리하는 APIlist.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 클라이언트 APIHttpClient 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 instanceofinstanceof 연산자 개선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 switchswitch 문에서 패턴 매칭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 {}