신규 서비스에 Java 17 버전을 사용할까 싶어 이참에 다시 한 번 자바 버전별 특징에 대해 정리해보기로 했다.
Java 8 (2014년 3월 출시) - LTS
- Lambda 표현식 추가 (익명 함수를 생성할 수 있는 기능)
- Stream API 추가 (컬렉션 요소를 다루는 기능)
- Date and Time API(Joda Time 기반) 추가 (thread-safe)
- PermGen 메모리 영역 삭제, 메모리 구조 변경
- Optional 클래스 (null 값을 처리)
- 메서드 참조
- 인터페이스 변경 (default 메서드와 static 메서드를 추가)
- Completable Future (멀티 스레드 프로그래밍)
Java 9 (2017년 9월 출시)
- 모듈 시스템 추가(필요한 모듈만 로드하여 불필요한 모듈을 로드하지 않아 보다 경량화된 애플리케이션 개발 가능)
- 컬렉션 팩토리 메서드 강화
- Set, List, Map 인터페이스에 Immutable 객체를 생성할 수 있는 새로운 메서드가 추가되었다.
- List.of("a", "b", "c"), Set.of("a","b"), Map.of("a","abc", "가", "가나다")
- Set, List, Map 인터페이스에 Immutable 객체를 생성할 수 있는 새로운 메서드가 추가되었다.
- 인터페이스의 private 메소드 지원
- G1 GC 기본 GC로 설정
Java 10 (2018년 3월 출시)
- 지역 변수 형 추론(var) 추가
- GC 인터페이스 개선 (Java 10에서는 G1 GC의 최대 힙 크기에 대한 기본값이 변경)
Java 11 (2018년 9월 출시) - LTS
- HTTP 클라이언트 API 추가 (자바에서도 http로 api 호출이 가능했음 이전에는 라이브러리를 이용해야지만 가능했음)
- String 클래스에 새로운 메소드 추가 (isBlank(), strip() 등)
- Files 클래스에 새로운 메소드 추가 (writeString(~), readString() 등)
- 컬렉션 인터페이스에 새로운 메소드 추가 (.toArray()) -> 원하는 타입의 배열을 선택하여 반환 가능해짐
- String[] sampleArray = Arrays.asList("Java", "Kotlin").toArray(String[]::new);
Java 12 (2019년 3월 출시)
- Switch 표현식 개선
- G1 GC 개선
Java 13 (2019년 9월 출시)
- Switch 표현식 개선(불필요한 break 문 없이 사용 가능)
String fruit = "banana";
int numLetters = switch (fruit) {
case "apple", "pear" -> 5;
case "banana", "kiwi", "orange" -> 6;
case "avocado", "mango" -> 7;
default -> 0;
};
- Text Blocks 추가 (이후 14에서 공식 지원됨)
- 문자열을 더욱 가독성 있게 작성할 수 있습니다. Text Blocks는 따옴표 대신 백틱(backtick) 기호(`)를 사용하고, 여러 줄의 문자열을 쉽게 작성할 수 있습니다.
String xml = """
<document>
<content>
Text Blocks Example
</content>
</document>
""";
Java 14 (2020년 3월 출시)
- Switch 표현식 개선(화살표 연산자 사용 가능)
- Record 클래스 추가(데이터 저장 클래스로 final로 선언, getter 메서드와 equals() 및 hashCode() 메서드 자동 생성)
- 패턴 매칭 instanceof 연산자
if (obj instanceof String) {
String str = (String) obj;
// str 객체를 사용합니다.
}
14버전에서는.. 아래와 같이 변경됨으로써 캐스팅 과정을 따로 거치지 않을 수 있게 되었다.
if (obj instanceof String str) {
// str 객체를 사용합니다.
}
- NullPointerException 개선 (발생한 객체의 이름과 값이 함께 출력되어 오류 해결데 도움됨)
Java 15 (2020년 9월 출시)
- Sealed 클래스 도입(클래스의 상속 제한 가능)
- Hidden Classes 추가 (Reflection API를 통해 접근할 수 없는 클래스)
Java 16 (2021년 3월 출시)
- (14의 기능으로부터 확정) instanceof 패턴 매칭 강화
- Records 클래스 확장
- Vector API 추가
Java 17 (2021년 9월 출시) - LTS
- Sealed 클래스 확장
- 패턴 매칭과 Switch 문 확장
- AOT(Head of Time) 컴파일러 추가
- ZGC, Shenandoah GC 개선 등 성능 향상
현재 11버전을 사용하고 있고, Optional이나 Stream, 디폴트인터페이스, 람다 등은 이제는 굉장히 유용하게, 빈번하게 사용하는 지라 17로 업그레이드를 할 경우 많은 부분에서 업그레이드가 되지 않을까 하는 기대감이 드는데 더욱 자세히 알아봐야겠다..
'자바' 카테고리의 다른 글
자바 / Map의 .put()과 .replace()의 차이 (0) | 2022.11.09 |
---|---|
자바 / 추상클래스 vs 인터페이스 차이 (1) | 2022.11.08 |
HttpServletRequestWrapper - RequestBody에 담긴 내용을 Interceptor에서 로그로 남겨보자. (0) | 2022.06.17 |
Static Synchronization in Java (Static과 Synchronized) (0) | 2022.03.21 |
MapStruct와 Lombok을 함께 사용해보자. (2) | 2022.03.11 |