JAVA 10 NEW FEATURE 정리

DYKO·2023년 4월 1일
0

JAVA NEW FEATURES

목록 보기
3/4

지역변수의 Type 추론 지원

  • 지역변수의 타입을 명시하지 않아도 됨 (이전에는 타입을 명시했어야 함)
  • 컴파일러는 대입되는 객체를 통해 지역변수의 타입을 추론
  • 지역변수 초기화 시에만 사용가능
  • 초기화하지 않은 지역변수나 null로 초기화한 지역변수, 전역변수, 메서드의 매개변수, 반환형, 람다 식 내부 등에는 사용할 수 없음
  • 예제
    before
    String message = "Good bye, Java 9";
    after
    @Test
    public void whenVarInitWithString_thenGetStringTypeVar()   {
      var message = "Hello, Java 10";
      assertTrue(message instanceof String);
    }


Collection API 메서드 추가

  • copyOf()
    대상을 복사하여 수정할 수 없는 Collection을 반환
    @Test(expected = UnsupportedOperationException.class)
    public void whenModifyCopyOfList_thenThrowsException() {
        List<Integer> copyList = List.copyOf(someIntList);
        copyList.add(4);    //error!!
    }
  • toUnmodifiable*()
    Stream 내부에서 collect() 시, 수정할 수 없는 Collection으로 반환하도록 함
    @Test(expected = UnsupportedOperationException.class)
    public void whenModifyToUnmodifiableList_thenThrowsException() {
        List<Integer> evenList = someIntList.stream()
                                   .filter(i -> i % 2 == 0)
                                   .collect(Collectors.toUnmodifiableList());
        evenList.add(4);    //error!!
    }


Optional*.orElseThrow() 메서드 추가

  • 새로 추가된 orElseThrow()메서드는 인자값을 따로 받지 않고 값이 없으면 NoSuchElementException을 발생시킴
  • 기존 Optional.get()을 활용한 코드보다 가독성이 개선됨
  • 예제
    before
      @Test
    public void whenListContainsInteger_OrElseThrowReturnsInteger() {
      Optional<Integer> firstEven = someIntList.stream()
        .filter(i -> i % 2 == 0)
        .findFirst();
      
      if(firstEven.isEmpty() { throw new NoSuchElementException(); }
        
      is(firstEven.get()).equals(Integer.valueOf(2));
    }
    after
    @Test
    public void whenListContainsInteger_OrElseThrowReturnsInteger() {
      Integer firstEven = someIntList.stream()
        .filter(i -> i % 2 == 0)
        .findFirst()
        .orElseThrow();
        
      is(firstEven).equals(Integer.valueOf(2));
    }


컨테이너 인식 지원

  • JVM이 Linux 기반 Docker 컨테이너에서 실행될 때, 컨테이너 인식 가능(이전에는 운영체제만 지원)
  • 컨테이너에 할당된 CPU 수, 총 메모리 등을 추출할 수 있음
  • JVM 옵션으로 활성/비활성 가능
    -XX:-UseContainerSupport ##컨테이너 인식 기능 활성화
  • JVM이 사용할 CPU 수 지정 가능
    -XX:ActiveProcessorCount=count ##JVM이 사용할 CPU 수 지정
  • Java 힙에 사용될 시스템 메모리의 양 제어 가능
    -XX:InitialRAMPercentage
    -XX:MaxRAMPercentage
    -XX:MinRAMPercentage


기타 변경사항



참고자료

New Features in Java 10 - Baeldung
Java 10 Features - DigitalOcean

profile
엔지니어가 되는 그 날 까지!

0개의 댓글