JDK 업데이트 정리 - 3

susemeeee·2021년 12월 17일
0

JDK 업데이트

목록 보기
3/3

1. Diamond Operator

기존 버전에서는 제네릭 타입 인스턴스 선언, 생성 시 타입을 중복해서 작성해야 했던 것을 생성 시 '<>' 연산자를 통해 생략이 가능하도록 변경되었습니다.

List<Integer> list1 = new ArrayList<Integer>();      //기존 버전

List<Integer> list2 = new ArrayList<>();            //JDK 7~

2. switch문에서 String 사용

기존 버전에서는 switch문에서 int, enum, char 등 숫자로 변환 가능한 원시 타입에 대해서만 사용이 가능했습니다. JDK 7버전부터는 switch문에 String이 사용 가능합니다.

String str = "abc";
if(str.equals("abc")){                         //기존 버전
	System.out.println(1);
}
else if(str.equals("def")){
	System.out.println(2);
}

String str2 = "abc";
switch (str2){                                //JDK 7~
    case "abc":
        System.out.println(1);
        break;
    case "def":
        System.out.println(2);
        break;
}

3. try문에서 자동 자원 관리

기존 버전에서는 DB connection, Stream 등을 Open할 때 finally 안에서 직접 close 작업을 해야 했습니다. JDK 7부터는 try문의 괄호 부분 안에 자원 객체를 넣으면 직접 종료 하지 않아도 try문이 끝났을 때 자동으로 종료해 주는 기능입니다.

주의할 점으로는 AutoCloseable 인터페이스를 구현한 클래스만 이 기능을 사용할 수 있습니다.

InputStreamReader is = new InputStreamReader(System.in);
try {                                                        //기존 버전
    is.read();
}catch (Exception e){
    e.printStackTrace();
}
finally {
    is.close();
}

try (InputStreamReader is2 = new InputStreamReader(System.in)) { //JDK 7~
    is2.read();
} catch (Exception e) {
    e.printStackTrace();
}

4. 숫자 리터럴 구분자

JDK 7버전부터는 숫자 리터럴의 숫자 사이에 구분자('_')를 넣을 수 있습니다.

int i1 = 1234567890;                    //기존 버전
long l1 = 123123123123123L;

int i2 = 1_234_567_890;                //JDK 7~
long l2 = 123_123_123_123_123L;

5. Concurrency API

JDK 5 버전에 출시된 java.util.concurrent에 새로운 API가 추가되었습니다.

1. ForkJoinPool

ForkJoinPool은 쓰레드 풀 서비스 중 하나입니다. 하나의 작업을 여러 개의 작업으로 분할(Fork)하고, 다시 합치면서(Join) 결과를 만들어 내는 방식입니다.

2. ThreadLocalRandom

기존에 존재하는 java.util.Random 클래스는 멀티쓰레드 환경에서 동기화 비용 때문에 성능적인 문제가 있습니다. JDK 7버전에서는 쓰레드마다 각자의 랜덤 생성기를 가지도록 하는 ThreadLocalRandom 클래스가 출시되었습니다.

3. ConcurrentLinkedDeque

thread-safe한 Deque 클래스입니다.

Deque(double-end-queue) : 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료 구조


6. File NIO 라이브러리

1.4버전에서 출시된java.nio 패키지가 업데이트 되었습니다. NIO API에서 파일 경로를 다루기 위한 Path 클래스와 디렉토리를 다루는 Files 클래스가 출시되었습니다.


7. Catching Multiple Exception

기존 버전에서는 1개의 catch 블럭에서 1개의 Exception만 잡을 수 있었던 것이 하나의 catch 블럭에서 여러 개의 Exception을 잡을 수 있도록 변경되었습니다. 아래와 같이 파이프 연산자를 사용해서 여러 개의 Exception type를 넣을 수 있습니다.

try{                     //기존 버전
    //...
} catch (IOException e){
    //...
} catch (IndexOutOfBoundsException e1){
    //...
}

try{                    //JDK 7~
    //...
} catch (IOException | IndexOutOfBoundsException e){
   	//...
}

8. G1 GC

새로운 방식의 GC가 출시되었습니다. 정확히는 JDK 6버전에 출시되었지만 7버전에서 정식으로 포함되었습니다. G1 GC는 JVM의 Heap 메모리를 동일한 크기의 여러 영역으로 나눠 객체를 할당하고, 영역이 꽉 차면 해당 영역에 대해 GC를 실행합니다.


9. 기타

  • Dynamic Language 지원
  • Java2D를 위한 XRender, Upstream, Java Deployment Ruleset 등이 추가
  • ECC(Elliptic Curve Cryptography) 지원

0개의 댓글