신규 서비스에 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", "가", "가나다")
  • 인터페이스의 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로 업그레이드를 할 경우 많은 부분에서 업그레이드가 되지 않을까 하는 기대감이 드는데 더욱 자세히 알아봐야겠다..

+ Recent posts