Java - Java Version
- 자바 버전 별 핵심 내용 정리
Java 버전별 핵심 내용
- 우선 자바는 1995년 5월 처음 Oak이라는 이름으로 발표되었지만, 1996냔 1월 안정화를 거쳐서 Java로 이름이 바뀜
- JDK 1.1
- 이너 클래스, 유니코드 지원, Bean 규약(기본 생성자 존재, getter setter 구성 등)
- J2SE 1.2
- 명칭 표기를 J2SE로 함 (5까지)
- Swing GUI
- JIT 컴파일러 추가
- Collection Framework
- J2SE 1.3
- HotSpot JVM
- JNDI
- JPDA
- J2SE 1.4
- 정규표현식 추가
- IPv6
- XML API
- J2SE 5
- 버전에 1을 뺌
- 제네릭 추가
- 어노테이션 추가
- Concurrency API ( 멀티스레드를 쉽게 구현 )
- Enum
- 오토박싱/오토언박싱
- Java SE 6
- 표기방식이 Java SE로 바뀜 ( 그 외 Java SE, Java EE 등이 있는데 우리가 사용하는 일반적인 Java가 Java SE임 )
- G1 GC를 테스트용으로만 사용하도록 추가
- JVM 면에서 퍼포먼스 향상
- Java SE 7
- 본격적으로 G1 GC 추가
- 다이아몬드 오퍼레이터 지원 ( List
list = new ArrayList<>(); ) - switch문에서 String 사용 가능
- switch문에서 자원들을 자동으로 close 해줌
- String Constant Pool의 위치를 Heap 내부로 이동
- NIO2 추가
- 숫자 표현법 추가
- 0b, 0, 0x 로 2,8,16 진법의 숫자를 나타낼 수 있게되었다. 그리고 숫자와 숫자사이에 _ 를 넣을 수 있게되었다. 이제 100000000 대신 100_000_000 이렇게 작성해서 0이 몇개인지 잘 확인할 수 있다.
- File의 확장 버전인 Files 추가
- Java SE 8
- 오라클 인수 후 첫 버전이며 Oracle JDK와 Open JDK로 나뉨
- 람다식 추가
- 인터페이스에 Default Method와 static Method 추가
- 스트림 API 추가
- Null처리 Optional 추가
- Thread-Safe 한 날짜 관련 클래스들 추가
- Java SE 9
- Java용 REPL, JShell 등장 (대화식 REPL(Read Eval print Loop) 도구 제공)
- Modular System (Jigsaw)지원
- 불변 Collection(immutable collection)제공
- Java 9는 익명 클래스에 대한 Diamond Operator를 허용 (anonymous inner 클래스에서 diamond operator 사용 가능)
- try-with-resources 개선
- 인터페이스 내 private 메소드 사용 가능
- Reactive Stream API 추가
- Optional To Stream
- Java SE 10
- var 키워드를 이용한 지역변수 선언 및 타입추론 가능
- 불변(Unmodifiable) Collection 향상
- 병렬 처리 가비지 컬렉션 도입으로 인한 성능 향상
- 개별 쓰레드로 분리된 Stop-The-World
- 루트 CA 목록 등 추가
- JDK의 Repository가 하나로 통합
- JVM 힙 영역을 시스템 메모리가 아닌 다른 종류의 메모리에도 할당 가능
- Deprecated된 API는 Java SE 10에서 모두 삭제
- Java SE 11
- Oracle JDK와 OpenJDK가 통합되었으며 Oracle JDK 가 유료 모델로 전환되었음.
- 람다 파라미터에 대한 지역변수 문법 간소화
- HTTP 클라이언트 표준화 기능 추가 : Java 9, 10에 사용되었던 jdk.incubator.http 패키지가 표준화되어 java.net.http 패키지로 추가
- 네스트 기반 액세스 컨트롤(Nest-based access controls)
- 액세스 가능성을 확장하는 브릿지 메소드 삽입 지원 컴파일러의 필요성 제거
- 다이나믹 클래스-파일 콘스탄스(Dynamic class-file constans)
- 새로운 형태의 구체화 가능한 클래스파일 상수를 만드는데 요구되는 비용과 간섭을 줄이고, 표현력과 성능을 위한 보다 다양한 옵션 제공
- 엡실론(Epsilon) 가지비 컬렉터 : 오버헤드의 최저지연과 할당 제한이 가능한 완전한 수동 가비지 컬렉터 적용
- Java SE 12
- switch문 확장
//기존 방식 switch (day) { case MONDAY: case FRIDAY: case SUNDAY: System.out.println(6); break; case TUESDAY: System.out.println(7); break; case THURSDAY: case SATURDAY: System.out.println(8); break; case WEDNESDAY: System.out.println(9); break; } //Java SE 12 부터의 방식 switch (day) { case MONDAY, FRIDAY, SUNDAY -> System.out.println(6); case TUESDAY -> System.out.println(7); case THURSDAY, SATURDAY -> System.out.println(8); case WEDNESDAY -> System.out.println(9); }
- switch문 확장
- Java SE 13
- switch문 개선을 위해 yield 예약어 추가
var a = switch (day) { case MONDAY, FRIDAY, SUNDAY: yield 6; case TUESDAY: yield 7; case THURSDAY, SATURDAY: yield 8; case WEDNESDAY: yield 9; };
- Text Block 줄 바꿈 문자가 자동으로 포함. (preview로 정식 지원은 아님)
String text = *""" Lorem ipsum dolor sit amet, consectetur adipiscing \ elit, sed do eiusmod tempor incididunt ut labore \ et dolore magna aliqua.\ """*;
- switch문 개선을 위해 yield 예약어 추가
- Java SE 14
- switch 확장된 버전이 이제 표준화되어 사용됨. (정식)
- 새로운 클래스 형태인 record가 preview로 등장
- getter, setter, toString, equals, hashcode 자동 지원 + 불변 클래스임 ```java public record Person(String name, int age) { }
// 사용 예제 Person person = new Person(“John”, 25); System.out.println(person); // toString() 메서드 자동 생성 ```
- 유용한 NullPointerExceptions
- NullPointerExceptions은 정확히 어떤 변수가 null인지 설명 해 줌.
- Java SE 15
- 13에서 preview였던 여러줄 문자열이 정식으로 됨.
- 상속 가능한 클래스의 범위를 지정할 수 있는 봉인 클래스가 제공된다. sealed 예약어 추가 (preview)
public abstract sealed class Shape permits Circle, Rectangle, Square { // 코드 }
- 이렇게 만들면 Shape를 상속받을 수 있는 클래스는 Circle Rectangle Square 뿐이다.
- Java SE 16
- Open JDK 버전관리가 Git으로 바뀜
- Java SE 17
- RandomGenerator ( 의사 난수 생성기 ): 어려운 난수를 생성해주는 API가 정식 출시 됨.