본문 바로가기
IT/JAVA

Java 13 특징 (feat. Java 10 특징)

by 최고영회 2019. 12. 20.
728x90
반응형
SMALL

프로그래밍 시 직접적인 영향이 있는 것들 위주로 정리

Java 10


Local-Variable Type Interface

알맞게 번역해 보면 `지역 변수 타입 추론` 정도가 되겠다.
var 도입으로 dynamic type을 지원하는 것은 아니며 컴파일러가 알아서 타입을 추론해서 컴파일 해주는 것.

// java 1.6 List<String> list = new ArrayList<String>();

// java 1.7 List<String> list = new ArrayList<>();

// java 10 var list = new ArrayList<String>(); var stream = list.stream();

제약사항

  • null 안됨
  • local 변수가 아닌 경우 안됨
  • 초기값 없으면 안됨
  • 배열 안됨
  • method 인자값으로는 사용 불가
  • 람다식에서 사용 불가

주의사항

API

73개의 표준 클래스 라이브러리 API가 추가됨

java.io.Reader

 

long transferTo(Writer) // reads all characters from this reader and writes the characters to the given writer in the order that they are read.

java.util.{Collection}

 

/** *@Collection List, Map, Set */ static Collection copyOf(Collection); // These return an unmodifiable List, Map or Set containing the elements of the given Collection, in its iteration order.

java.util.{Optional}

/** *@Optional Optiona, OptionalDouble, OptionalInt, OptionalLong */ Throwable orElseThrow(); // New method which essentially does the same as get(), i.e. if the Optional holds a value it is returned. // Otherwise, a NoSuchElementException is thrown.

java.util.stream.Collectors

Collector toUnmodifiableList(); Collector toUnmodifiableSet(); Collector toUnmodifiableMap(Function, Function); Collector toUnmodifiableMap(Function, Function, BinaryOperator); // These four new methods return Collectors that accumulate the input elements into the appropriate unmodifiable collection.

기타

CDS(Class-Data Sharing)

JVM 기동시 성능을 향상하거나 여러대의 JVM이 하나의 물리 장비 또는 가상 장비에서 돌아가는 경우, 자원에 미치는 영향을 줄이기 위한 기능
CDS는 JVM에서 공통으로 사용하는 클래스들을 공유하는 저장소에 위치시키고 이를 공유해서 사용하는 방식으로 제공됨 (.jsa 파일)

Additional Unicode Language-Tag Extensions

java.util.Local 클래스의 향상된 버전 (cu, fw, rg, tz 태그가 추가됨)

나머지는 JVM, Compiler, 기타 변경 및 개선이라서 관심 있는 사람들만 찾아보면 됨 (http://openjdk.java.net/projects/jdk/10/)

Java 13


Switch-Case

// Java 12 이전 
private static String getText(int number) { 
  String rtn = ""; 
  switch(number) { 
    case 1, 2: 
      rtn = "one or two"; 
      break; 
    case 3: 
      rtn = "three"; 
      break; 
    default: 
      rtn = "Unknown"; 
      break; 
    }; 
  return result; 
  } 
  
  // Java 12 
  private static String getText(int number) { 
    String rtn = switch(number) { 
      case 1, 2: 
        break "one or two"; 
      case 3: 
        break "three"; 
      default: 
        break "unknown"; 
    }; 
    return rtn; 
  } 
  
  // Java 13 
  private static String getText(int number) { 
    String rtn = switch(number) { 
      case 1, 2: -> { 
        yield "one or two"; 
      } 
      case 3 -> { 
        yield "three"; 
      } 
      default -> "Unknown"; 
    }; 
  }
  

Text Block

// AS-IS 
String mailHtml = "<html>\n" + 
                  " <body>\n" + 
                  " <p>Hello</p>\n" + 
                  " </body>\n" + 
                  "</html>"; 

// TO-BE 
String newMailHtml = """ 
                     <html> 
                       <body> 
                         <p>Hello</p> 
                       <body>
                     </html> 
                     """;

 

728x90
반응형
LIST