Java 8, 11, 17

PEPPERMINT100·2024년 10월 20일
0

Java는 썬 마이크로 시스템즈에서 1995년에 개발한 객체지향 언어이다. 오랜 시간 동안 많은 개발자들에게 사랑받아 왔으며 많은 진화를 거쳤다.

현재는 Java 22 버전까지 있는것으로 알고 있다. 그 중에서 가장 많이 사용되는 버전은 8, 11, 17이다.

이유는 LTS, Long term support의 약자로 장기간 동안 지원을 해주도록 만들었기 때문이다. 시스템을 하나 구축했다면 보통 오랜기간 동안 유지보수 할 것임으로 안정적이게 LTS 버전을 이용하는 경우가 많다.

처음 Java를 공부할 때는 람다문법을 사용하기 위해 8을 공부했고 이전 회사에서는 11을 사용했으며 지금은 17을 사용해보고 있다.

이 LTS 버전들의 특징에 대해서 간단히 정리해보았다.

Java 8

람다 표현식

  • 익명함수처럼 코드를 간결하게 작성할 수 있다. 이를 통해 함수형 프로그래밍이 가능하다.
(int a, int b) -> a + b;

스트림 API

  • 컬렉션 데이터의 처리를 쉽게할 수 있도록 도와준다.
List<String> names = Arrays.asList("John", "Jane", "Tom");
names.stream().filter(s -> s.startsWith("J")).collect(Collectors.toList());

인터페이스 디폴트 메소드

  • 인터페이스에 디폴트 메소드를 추가함으로서 모든 구현체에 필요한 공통 메소드를 작성 가능하다.(Swift의 프로토콜 초기구현과 비슷한것 같다.)
interface MyInterface {
    default void defaultMethod() {
        System.out.println("This is a default method");
    }
}

Optional

  • Optional 래퍼를 통해 null 값을 안전하게 처리할 수 있다.
Optional<String> optional = Optional.ofNullable("Hello");
optional.ifPresent(System.out::println);

Java 11

var 키워드

  • var를 사용하여 지역변수를 선언할 때에는 타입을 명시하지 않아도 컴파일러가 추론한다.
var list = List.of("Java", "Kotlin", "Scala");

HTTP Client API

  • Java 11에서 HTTP Client가 표준화 되었다.
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://example.com"))
    .build();

String 관련 메소드

  • isBlank, lines, repeat 등 유용한 문자열 처리 메소드가 추가되었다.

ZGC

  • 매우 짧은 일시 정지시간을 제공하는 새로운 가비지 컬렉터로 대규모 메모리관리에 유리하다.

Java 17

패턴 매칭

  • instaceof 연산자를 통해 캐스팅의 필요성을 줄였다.
if (obj instanceof String s) {
    System.out.println(s.toUpperCase());
}

sealed class

  • 상속할 수 있는 클래스를 명시적으로 정의할 수 있다.
public abstract sealed class Shape
    permits Circle, Square {
}

Switch 표현식 개선

  • 복잡한 Switch문을 조금 간결하게 작성할 수 있다.
int numLetters = switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> 6;
    case TUESDAY -> 7;
    default -> throw new IllegalArgumentException("Invalid day: " + day);
};

Record class

  • 데이터를 간단히 다루기 위한 불변 객체를 정의한다.
  • Record 클래스는 보통 DTO, VO에 많이 사용하며 boilerplate 코드를 자동으로 생성해준다.
  • 기본적으로 불변이기 때문에 데이터를 안전하게 다룰수 있고 멀티 스레드 환경에서도 안전하다.
profile
기억하기 위해 혹은 잊어버리기 위해 글을 씁니다.

0개의 댓글