ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자바] 자바 버전별 특징 간단 정리
    자바 2022. 12. 23. 23:48
    728x90

    자바는 하위 호환성이 높기에 특정 자바 버전만을 공부할 필요가 없다.

     

    JAVA 7

    1. Type Inference ( 타입 추론 )

    • 제네릭 클래스의 생성자 호출 시 필요한 타입 인자를 컴파일러가 추론할 수 있으면, < > 로 대체 가능
    // before version 7 
    List<String> list = new ArrayList<String>();
    // after version 7
    List<String> list = new ArrayList<String>();
    

    2. Switch 문 문자열 허용

     

    3. try-with-resources

    • 기존에는 finally 블록으로 자원 해제하는 코드가 중복, try에서 자원 생성하고 사용해도 finally 블록으로 종료할 필요 없이 try 끝나면 자동 종료

    4. 멀티캐치 -> 반복되는 코드 감소가능

     

    5. ForkJoinPool

    • 분할-정복 방식을 위한 ForkJoinPool 클래스 제공 → 이 클래스는 분할된 작업을 병렬로 처리해주면서 CPU 성능을 더 사용하여 처리 시간 단축이 가능해짐
    • Fork Join Framework인데, 기본적으로 쓰레드 풀 서비스의 일종이다.
    • 기본 개념은 큰 업무를 작은 업무 단위로 쪼개고, 그것을 각기 다른 CPU에서 병렬로 실행한 후 결과를 취합하는 방식이다. ( 먼저 쓰래드를 쪼개서 업무를 수행(Fork) 시키고 더이상 쪼갤 수 없으면 결과를 Join해서 값을 취합한다 )
    분할 - 정복이란 : 둘 이상의 부분으로 나눈뒤에 각 부분에 대해서 수행을 하고 값들을 취합하는 것

     

    JAVA 8

     

    1. Lambdas

    • 익명 내부 클래스를 람다 표현식으로 바꿀 수 있다

    2. Interface 클래스에 구현체 작성 가능

     

    3. Optional 클래스

    • null 체크를 해주는 클래스

    4. Collections & Streams

    • List 반복문을 깔끔하고 구현을 편하게 해주는 Stream API ( 순차 / 병렬 작업을 지원하는 )를 사용할 수 있다.

    5. method reference 가능

    • lambda (Soccer s) -> s.getGoal() // method reference Soccer::getGoal

     

     

    JAVA 9

    1. Colletions

    • 컬렉션에 배열을 쉽게 생성할 수 있는 메서드 추가

    2. Stream

    •  이전에는 filter 메서드 사용해서 전체 스트림 반복하면서 PREDICATE 적용, 9 이후에는 takeWhile, dropWhile, iterate 메서드 등 가능
    // 50이하 요소 선택 
    List<Integer> list = num.stream() 
                      .takeWhile(i -> i <= 50 ) 
                      .collect(toList()) 
                      
    // 50이하 요소 선택 
    List<Integer> list = num.stream() 
                      .dropWhile(i -> i <= 50 ) 
                      .collect(toList())

     

    3. Optional

    • 유용한 메서드 추가
    1. or()
    2. ifPresentOrElse()
    

     

    4. Interface에 private 메서드 정의 가능

     

    JAVA 10

    1. 지역변수 타입 추론 ( var )

    • 지역 변수 타입을 var 로 지정 가능

    2. GC Interface

    • 다양한 GC의 코드 고립도를 향상하는 인터페이스를 도입
    1.  

     

    JAVA 11

    1. String, Files 클래스에 새로운 메서드 추가

    2. Lambdas Type Reference ( var  )

    • 람다 표현식에서 타입 추론 ( var ) 사용 가능

     

    JAVA 14

    1. 스위치 표현(Standard)

    Java SE 12 및 13에서 preview였던 스위치 표현식이 이제 표준화되었습니다.

    -> 스위치 표현식이 값을 반환 가능하며 fall-through/break 문제 없이 표현식에 람다 스타일 구문을 사용 가능

     

    int numLetters = switch (day) {
        case MONDAY, FRIDAY, SUNDAY -> 6;
        case TUESDAY                -> 7;
        default      -> {
          String s = day.toString();
          int result = s.length();
          yield result;
        }
    };

     

    2. record(preview)

    Java로 많은 상용구를 작성하는 고통을 완화하는데 도움이 되는 레코드 클래스가 있습니다.

     

    데이터, getter/setter, equals/hashcode, toString만 포함되는 이 Java SE 14 이전 클래스

    final class Point {
        public final int x;
        public final int y;
    
        public Point(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
        *// state-based implementations of equals, hashCode, toString// nothing else*

    레코드 사용

    record Point(int x, int y) { }

     

    3. 유용한 NullPointerExceptions

    NullPointerExceptions은 정확히 어떤 변수가 null인지 설명합니다.

    author.age = 35;
    ---
    Exception in thread *"main"* java.lang.NullPointerException:
         Cannot assign field *"age"* because *"author"* is null

     

    java 8 , 11 , 17은 LTS (long term support) 버전으로 유지보수기간이 길기에 3가지 버전을 자주 쓴다

Designed by Tistory.