개발자의 스터디 노트
자바 버전별 정리 본문
이 포스팅의 출처입니다.
https://www.skyer9.pe.kr/wordpress/?p=287
https://velog.io/@ljo_0920/java-%EB%B2%84%EC%A0%84%EB%B3%84-%EC%B0%A8%EC%9D%B4-%ED%8A%B9%EC%A7%95
JDK 1.0
- 1996년 JDK 1.0 발표
JDK1.1
- 1997년
- JDBC, RMI, Reflection, JIT, Inner Class
JDK 1.2
- 1998년
- 자바를 세가지 버전으로 나눔(Java SE 1.2, ME 1.2, EE 1.2 발표)
JDK 1.3
- 2000년
- HotSpot(Sun에서 만든 JIT구현)
- JNDI
JDK 1.4
- 2002년
- Regular Expression, Assert keyword, Security 2 version, Non Blocking IO(NIO)
Java5
- 2004년
- Generics, annotation, auto boxing, enum, vararg, foreach, static imports
- java.util.concurrent API, scanner class
Java6
- 2006년
- G1(Garbage First) GC 지원
Java7
- 2011년
- try-resource, generics 내 타입추론, 숫자에서 underscore 사용가능
- Type Inference(타입 추론)
// 7 버전 이전
List<String> list = new ArrayList<String>();
//7 버전 이후
List<String> list2 = new ArrayList<>();
- String in switch
switch (a) {
case "jeongmin":
System.out.println("asd");
break;
case "jeongmin2":
System.out.println("qweqwe");
break;
default:
break;
}
- Catching Multiple Exception Type in Single Catch Block
Java8
- 2014년
- 오라클 인수 후 첫번째 버전
- 2개 버전으로 나뉨(Oracle JDK, OpenJDK)
- Lambda, new Date and Time API(LocalDAteTime,...)
- interface default method
- Optional
- PermGen Area 제거
Java9
- 2017년
- 모듈시스템 등장(jigsaw)
Java10
- 2018.03
- var 키워드
- 병렬 처리 가비지 컬렉션 도입으로 인한 성능 향상
- JVM 힙 영역을 시스템 메모리가 아닌 다른 종류의 메모리에도 할당 가능
Java11
- 2018.09
- OracleJDK 와 OpenJDK 통합
- OracleJDK가 구독형 유료 모델로 전환
- 서드파티 JDK로의 이전 필요
- lambda 지역변수 사용법 변경
(var x, var y) -> x.process(y) => (x, y) -> x.process(y)
Java12
- 2019.03
- switch문 확장
Java13
- 스위치 표현식(preview)
이제 스위치 표현식이 값을 반환 가능하며 fall-through/break 문제 없이 표현식에 람다 스타일 구문을 사용 가능
switch(status) {
case SUBSCRIBER:
*// code block*break;
case FREE_TRIAL:
*// code block*break;
default:
*// code block*}
boolean result = switch (status) {
case SUBSCRIBER -> true;
case FREE_TRIAL -> false;
default -> throw new IllegalArgumentException(*"something is murky!"*);
};
- Multiline Strings(Preview)
String htmlBeforeJava13 = *"<html>\n"* +
*" <body>\n"* +
*" <p>Hello, world</p>\n"* +
*" </body>\n"* +
*"</html>\n"*;
String htmlWithJava13 = *"""
<html>
<body>
<p>Hello, world</p>
</body>
</html>
"""*;
Java14
- 스위치 표현식 표준화
버전 12 및 13에서 preview였던 스위치 표현식이 이제 표준화 되었다.
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
default -> {
String s = day.toString();
int result = s.length();
yield result;
}
};
- instanceof 패턴 매칭(preview)
- record(data object) 선언 기능 추가( preview)
Java로 많은 사용구를 작성하는 고통을 완화하는 데 도움이 되는 레코드 클래스가 있다.
데이터,(잠재적으로) getter/setters, equals/hashcode, toString만 포함하는 이 Java 14이전 클래스
final class Point {
public final int x;
public final int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
}
*// state-based implementations of equals, hashCode, toString// nothing else*
레코드를 사용
record Point(int x, int y) { }
- 유용한 NullPointerExceptions
마지막으로 NullPointerExceptions는 정확히 어떤 변수가 null인지 설명한다.
author.age = 35;
---
Exception in thread *"main"* java.lang.NullPointerException:
Cannot assign field *"age"* because *"author"* is null
Pattern Matching For InstanceOf(preview)
이전에는 다음과 같이 instanceof 내부에서 객체를 캐스팅 필요
if (obj instanceof String) {
String s = (String) obj;
*// use s*
}
이제 이 작업을 수행하여 캐스트를 효과적으로 삭제 가능
if (obj instanceof String s) {
System.out.println(s.contains(*"hello"*));
}
Java 15
- Text-Blocks / Multiline Strings
Java 13의 실험 기능으로 도입된 여러 줄 문자열은 이제 프로덕션 준비 완료
String text = *"""
Lorem ipsum dolor sit amet, consectetur adipiscing \
elit, sed do eiusmod tempor incididunt ut labore \
et dolore magna aliqua.\
"""*;
- Records & Pattern Matching(2차 preview, 상단 Java14 참조)
- 스케일링 가능한 낮은 지연의 가비지 컬렉터 추가(ZGC)
- 레코드 (2차 preview, 상단 Java14 참조)
- Sealed Classes - Preview
상속 가능한 클래스를 지정할 수 있는 봉인 클래스가 제공된다.
상속 가능한 대상은 상위 클래스 또는 인터페이스 패키지 내에 속해 있어야 한다.
public abstract sealed class Shape
permits Circle, Rectangle, Square {...}
즉, 클래스가 public인 동안 하위 클래스로 허용되는 유일한 Shape 클래스들은 Circle, Rectangle 및 Square 이다.
- Nashorn JavaScript Engine 제거
Java16
- Pattern Matching for instanceof
- Unix-Domain Socket Channels
이제 Unix 도메인 소켓에 연결할 수 있다(macOS 및 Windows(10+)에서도 지원됨)
socket.connect(UnixDomainSocketAddress.of(
*"/var/run/postgresql/.s.PGSQL.5432"*));
- Foreign Linker API - Preview
JNI(Java Native Interface)에 대한 계획된 교체로, 기본 라이브러리에 바인딩할 수 있다(C 생각)
- Records & Pattern Matching
Java17
- Java17은 Java11 이후의 새로운 Java LTS(장기 지원) 릴리스
- Pattern Matching for switch (Preview)
이제 객체를 전달하여 기능을 전환하고 특정 유형을 확인할 수 있다.
public String test(Object obj) {
return switch(obj) {
case Integer i -> *"An integer"*;
case String s -> *"A string"*;
case Cat c -> *"A Cat"*;
default -> *"I don't know what it is"*;
};
}
- Sealed Classes(Finalized)
Java15에서 preview 제공되었던 기능 완료
- Foreign Function & Memory API(Incubator)
Java Native Interface(JNI)를 대체한다. 기본 함수를 호출하고 JVM외부의 메모리에 액세스할 수 있다. 지금은 C가 C++, 포트란과 같은 추가 언어 지원 계획을 가지고 있다고 생각
- Deprecating the Security Manager
자바 1.0 이후로 보안 관리자가 존재해 왔었지만 현재는 더 이상 사용되지 않으며 향후 버전에서는 제거될 예정
'자바 > 인스턴트코드' 카테고리의 다른 글
git cli 명령어 정리 (0) | 2022.07.07 |
---|---|
기술면접 대비 예상 질문 리스트 (0) | 2022.04.15 |
자바 디자인패턴 - 프록시 패턴(Proxy Pattern) (0) | 2022.04.13 |
자바 디자인패턴 - 옵저버 패턴(Observer Pattern) (0) | 2022.04.13 |
자바 디자인패턴 - 템플릿 메서드 패턴(Template Method Pattern) (0) | 2022.04.13 |