[0626] Java Versions

ㅇㅇㅈ·2025년 6월 26일


자바야~
엄마가 말하지 않아도 스스로 발전한 거야?

JDK 1.8 LTS (2014)

  1. Lamda, Stream API
  2. Interface Default Method
    인터페이스가 구현체를 가질 수 있게 됨.
  3. Optional 클래스
    NullPointerException 방지용 값 컨테이너.
  4. Date&Time API: java.time 패키지 새로 도입

JDK 9 ~ JDK 11 LTS

Java 9 (2017)

  • 모듈 시스템(Jigsaw): 대규모 프로젝트의 의존성/캡슐화 지원
    기존에는 패키지만으로만 개발되었다면,
    모듈을 통해 로직 간의 의존도를 낮추며 작성할 수 있도록 함
  • JShell: 자바 공식 REPL
    빠른 실험/테스트 가능
  • Stream API에 takeWhile, dropWhile 등 메소드 추가

Java 10 (2018)

  • var 키워드
    지역 변수 타입 추론 지원

  • Default GC 변경

Java 11 (2018, LTS)

  • HTTP Client API (java.net.http) 도입
  • String method: isBlank, lines, repeat
  • 오랴래된 JDK 내장 API 일부를 제거하고, OpenJDK가 부각되는 경향을 보임

JDK 12 ~ JDK 17 LTS (2021)

  1. Record: 데이터 클래스를 간단하게 선언, 불변 객체 지원


    대략 이정도의 편의성 개선이라고 한다.

  2. 패턴 매칭

  • instanceOf : 객체가 특정 크래스(또는 인터페이스)의 인스턴스인지 확인하는 연산자.
void printIfString(Object obj) {
    if (obj instanceof String) {
        String s = (String) obj;  // 안전하게 형변환
        System.out.println("문자열: " + s);
    } else {
        System.out.println("String이 아님");
    }
}
  • Switch Expression : 간결하고 직관적으로 변경

    기존의 switch문은
    • 값 변환 불가능
    • break 필수
    • fall-through(의도치 않은 코드 실행)의 문제가 이었으나
String result;
switch(day) {
    case "MON":
        result = "월요일";
        break;
    case "TUE":
        result = "화요일";
        break;
    default:
        result = "기타";
}
  • Switch Expression으로 Switch 값을 반환하는 표현식으로 사용하게 됨
  • break 대신 ->, 여러 case를 한 줄에 합칠 수 있음
String result = switch(day) {
    case "MON" -> "월요일";
    case "TUE" -> "화요일";
    default -> "기타";
};
  1. Text Blocks : 글자 쓰기 편해짐. 가독성도 좋아지고

  2. Sealed Classes : 상속 가능한 클래스를 제한하여 의도하지 않은 확장성을 막아 안정성을 강화

  3. Shenandoah GC: 저지연 가비지 컬렉터 추가, 서버 환경에서의 성능 개선.

→ LTS(Long Term Support): Java 8 이후 오랜만의 장기 지원 버전, 최신 코드 표준.

0개의 댓글