티스토리 뷰

JAVA

[Java Version] Java 8 vs 11vs 17

DevBee 2022. 2. 11. 11:51

새로운 회사에서 프로젝트를 진행하면서 Java Version에 대한 얘기가 나왔다. 기존에는 LTS 버전을 아무 생각없기 기본으로 사용해 왔었는데 17이 LTS로 되면서 어떤 차이가 있고 어떤 점을 고려해서 스펙을 선택하는 것이 좋은지 고민이 되었다.

 

❗️물론 많은 차이를 알지는 못하지만... 우선 주요 내용을 정리해보려고 한다...ㅠ

 

Java 8

Lambda

Java 8 이전에는 a new Runable 과 같은 인스턴스 생성을 할 때마다, 익명의 내부 클래스를 작성해야 했다.

Runnable runnable = new Runnable(){
    @Override
    public void run(){
        System.out.println("Hello world !");
    }
};

하지만 람다를 사용하면 아래와 같이 코드를 작성할 수 있다.

Runnable runnable = () -> System.out.println("Hello world two!");

 

 

Collection & Stream

Java 8에서는 collections를 위한 함수형 스타일의 연산자를 가진다.

List<String> list = Arrays.asList("franz", "ferdinand", "fiel", "vom", "pferd");

list.stream()
    .filter(name -> name.startsWith("f"))
    .map(String::toUpperCase)
    .sorted()
    .forEach(System.out::println);

 

Java 11

Strings & Files

새로운 메소드가 추가되었다. 아래 메소드 외에도 더 많은 메소드가 추가되었다.

"Marco".isBlank();
"Mar\nco".lines();
"Marco  ".strip();

Path path = Files.writeString(Files.createTempFile("helloworld", ".txt"), "Hi, my name is!");
String s = Files.readString(path);

 

Run Source Files

Java 10부터 자바 소스 파일을 먼저 컴파일하지 않고 실행할 수 있다.

ubuntu@DESKTOP-168M0IF:~$ java MyScript.java

 

Local-Variable Type Inference (var) for lambda parameters

(var firstName, var lastName) -> firstName + lastName

 

HTTPClient

Java 9로부터 최종 버전의 HTTPClient 적용

 

Other Stuff

Flight Recorder, No-Op Garbage Collector, Nashorn-Javascript-Engine deprecated etc.

 

Java 17

Pattern Matching for switch (Preview)

switch 함수에 Object를 전달할 수 있고 특정 유형을 확인할 수 있다.

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)

어떤 클래스의 하위 클래스로 어떤 것이 허용되는지 자세히 알고 싶다면, sealed 라는 기능이 있다.

public abstract sealed class Shape
    permits Circle, Rectangle, Square {...}

이것은 클래스가 public인 동안 Shape의 하위 클래스는 Circle, Ractangle, Square만 허용된다는 의미다.

 

Foreign Function & Memory API (Incubator)

Java Native Interface(JNI)를 위한 대체제이다. 네이티브 함수를 호출하고 JVM 외부 메모리에 접근할 수 있다. 현재로써는 C가 필요하지만 추후 언어가 될 예정이다.

 

Deprecating the Security Manager

Java 1.0부터 있어왔던 Security Manager가 더 이상 지원하지 않게 되었다.

 

❗️이외에도 내부적인 구조의 변화들도 많이 있을 것으로 생각된다. 좀 더 구체적인 내용들은 공부하면서 틈틈히 채워나갈 예정이다... ㅠ 

 

참고

'JAVA' 카테고리의 다른 글

[List] List.of()로 List 생성 시 주의! (feat. 불변 컬렉션)  (0) 2023.01.24
[JAVA] Annotation 알아보기  (0) 2022.02.19
[Java] stream 알아보기  (0) 2022.02.11
[Java Study 15] 람다식  (0) 2021.05.15
[Java Study 14] 제네릭  (1) 2021.05.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함