soowanlog
Java 버전 별 특징 본문
JDK 1.0
- 1996. 01 공개
- 발표 이전에 불린 이름은 Oak
JDK 1.1
- 1997. 02 공개
- JDBC, Inner Class, Java Beans, RMI, Reflection, Calendar, Unicode 지원 등이 추가
- Beans 규약
1. 기본 생성자가 반드시 존재해야 함
2. 모든 속성은 비공개
3. 속성에 접근하고 꺼내올 수 있는 getter, setter 메서드를 구성
4. Serializable을 구현
J2SE 1.2
- 1998. 12 공개
- Swing GUI, JIT, Collection Framework 등이 추가
- 이때부터 약칭을 J2SE(Java 2 Standard Edition)으로 표기
J2SE 1.3
- 2000. 03 공개
- HotSpot JVM, JNDI, JPDA, JavaSount 등이 추가
J2SE 1.4
- 2002. 02 공개
- 정규표현식, Assertion, IPv6, XML API 등이 추가
J2SE 5
- 2004. 09 공개
- Generics, Annotation, Concurrency API, Enumeration 등이 추가
- 이때부터 버전 표기에서 1을 빼기 시작
- Generics :
기존 Collection Framework를 이용할 때 발생할 수 있는 ClassCastException을 컴파일 단계에서 검증할 수 있음.
즉, 형변환 시 예외가 발생하는 것을 작성 중에 방지할 수 있다는 것
- Concurrency API :
이 API를 통해 병렬 프로그래밍, 멀티 스레드를 쉽게 구현
- Enumeration :
데이터 구조를 더 쉽게 정의하고 사용할 수 있는 열거체, 다음과 같이 사용
enum Vehicle {
CAR,
CRUSE
}
Java SE 6
- 2006. 12 공개
- JDBC 4.0, Java Compiler API, Pluggable Annotation 등이 추가
- 가비지 컬렉터 G1 GC를 오직 테스트용으로만 사용하도록 추가
- 이때부터 표기가 Java SE로 변경
Java SE 7 (LTS)
- 2011. 07 공개
- Diamnond Operator<> : General Class 초기화 시 Type Interface를 지원
// Java SE 7 이전
List<Integer> list = new ArrayList<Integer>();
// Java SE 7 이후
List<Integer> list = new ArrayList<>();
- switch문에서 String 사용 가능
- try 문에서 자동 자원 관리 (try-with-resources) : try() 내에 선언된 자원을 try가 종료될 때 자동으로 close 함
Java SE 8 (LTS)
- 2014. 03 공개
- Lambda Expression : 메서드로 전달할 수 있는 익명 함수를 단순화한 것
list.forEach(a -> System.out.println(a));
- Method Reference : Lambda Expression을 축약한 형태
list.forEach(System.out::println);
- Interface의 Default Method : Interface에 구현 내용을 포함한 메서드를 선언
public interface Car {
default void move() {
System.out.println("도로를 달립니다.");
}
}
- Optional : 값이 비어있음을 명시적을 표현할 수 있고 NullPointerException에 잘 대응할 수 있음
// 생성
Optional<String> car = Optional.of("자동차");
Optional<String> bicycle = Optional.of(null); // NullPointerException 발생
Optional<String> cruse = Optional.ofNullable(null);
// 추출
String sonata = car.orElse("자동차가 아닙니다.");
String avante = cruse.orElse("유람선이 아닙니다.");
// 확인
System.out.println(sonata); // 자동차 출력
System.out.println(avante); // 유람선이 아닙니다. 출력
- Stream API : Stream은 선언형으로 컬렉션 데이터를 처리할 수 있음
Java SE 9
- 2017. 09 공개
- Project Jigsaw 기반으로 런타임이 모듈화 됨
- Jigsaw 모듈 시스템
module java.sql {
requires public java.logging;
requires public java.xml;
exports java.sql;
exports javax.sql;
exports javax.transaction.xa;
}
Jigsaw의 이점
1. 편하고 효율적인 Java 개발 환경을 만듦
2. Jar 기반 모노리틱 방식을 개선하여 모듈 지정 및 모듈별 버전 관리 기능이 가능
3. 필요한 모듈만 구동하여 크기와 성능 최적화가 가능
4. 임베디드와 같은 환경에서 필요한 모듈만 탑재되어 적은 메모리로 로딩이 가능
- Interface의 Private Method : Interface 내에서 private method 사용 가능
interface Car {
private static String stop() {
return "멈춥니다.";
}
private String run() {
return "도로를 달립니다.";
}
}
Java SE 10
- 2018. 03 공개
- var 키워드를 이용한 지역 변수 타입 추론
- 병렬 처리 GC
Java SE 11 (LTS)
- 2018. 09 공개
- String Class에 새로운 메서드 추가
- Collection Interface에 toArray() 메서드 추가
- var는 초기값이 있는 지역변수로만 선언이 가능했지만, 람다식에서 var을 사용할 수 있음
- javac을 통해 컴파일 하지 않고도 바로 java파일 실행 가능
// java 11 이전
$ javac Test.java
$ java Test
Hello World!
// java 11 이후
$ java Test.java
Hello World!
Java SE 12
- 2019. 03 공개
- GC 개선
- Unicode 11 지원
Java SE 13
- 2019. 09 공개
- switch 문에 yield 예약어 추가
Java SE 14
- 2020. 03 공개
- switch 문 표현 확장
// java 14 이전
switch(vehicle) {
case CAR:
case BICYCLE:
System.out.println("육상");
break;
case CRUSE:
case BOAT:
System.out.println("수상");
break;
case AIRPLANE:
System.out.println("공중");
break;
}
// java 14 이후
switch(vehicle) {
case CAR, BICYCLE -> System.out.println("육상");
case CRUSE, BOAT -> System.out.println("수상");
case AIRPLANE -> System.out.println("공중");
}
- NullPointerException 발생 시 어떤 변수가 null인지 설명
Java SE 15
- 2020. 09 공개
- 다중 텍스트 블록(Multiline String)
String sql = """
SELET *
FROM vehicle
""";
Java SE 16
- 2021. 03 공개
- instanceof : Object에서 component의 조건부 추출을 더 간결하고 안전하게 표현 가능
// java 16 이전
@Override
public boolean equals(Object obj) {
if (obj instanceof Vehicle) {
Vehicle vehicle = (Vehicle) obj;
if (this.vehicleCode == vehicle.vehicleCode) return true;
else return false;
}
return false;
}
// java 16 이후
@Override
public boolean equals(Object obj) {
if (obj instanceod Vehicle vehicle) {
if (this.vehicleCode == vehicle.vehicleCode) return true;
else return false;
}
return false;
}
Java SE 17 (LTS)
- 2021. 09 공개
- Sealed Classes : 봉인 클래스를 통해 허용되는 하위 유형을 정의하여 세분화된 상속 제어를 할 수 있음. 봉인 클래스는 다음과 같은 규칙이 있음.
1. 봉인 클래스와 permit 된 서브 클래스는 동일한 모듈 또는 패키지에 속해야 함.
2. 모든 permit된 서브 클래스는 봉인 클래스를 extends 해야 함.
3. 모든 permit된 서브 클래스는 슈퍼 클래스에 의해 시작된 봉인을 이어갈지 선언해야 함
(final : 더 이상 확장하지 않음, sealed : 자신도 봉인하여 자식 클래스를 가짐, non-sealed : 봉인을 해체하여 다른 클래스가 확장 가능)
- switch 패턴 매칭 (preview)
Java SE 18
- 2022. 03 공개
- Java API의 기본 Charset을 UTF-8로 지정
- swtich 패턴 매칭 (2nd preview)
Java SE 19
- 2022. 09 공개
- record 패턴 매칭 (preview)
- switch 패턴 매칭 (3rd preview)
- 가상 스레드 (preview)
Java SE 20
- 2023. 03 공개
- record 패턴 매칭 (2nd preview)
- switch 패턴 매칭 (4th preview)
- 가상 스레드 (2nd preview)
※ 위에 기록한 정보 외에도 각 버전별 추가 변경 사항이 있습니다. 필요하시면 공식문서를 참고하시기 바랍니다.
참 고 자 료
'백엔드 > Java' 카테고리의 다른 글
JVM (0) | 2024.03.08 |
---|---|
Garbage Collector (0) | 2024.03.07 |
Java (0) | 2024.03.07 |
JDBC (0) | 2024.03.06 |
Persistence Framework (0) | 2024.03.06 |