기존 버전에서는 제네릭 타입 인스턴스 선언, 생성 시 타입을 중복해서 작성해야 했던 것을 생성 시 '<>' 연산자를 통해 생략이 가능하도록 변경되었습니다.
List<Integer> list1 = new ArrayList<Integer>(); //기존 버전
List<Integer> list2 = new ArrayList<>(); //JDK 7~
기존 버전에서는 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;
}
기존 버전에서는 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();
}
JDK 7버전부터는 숫자 리터럴의 숫자 사이에 구분자('_')를 넣을 수 있습니다.
int i1 = 1234567890; //기존 버전
long l1 = 123123123123123L;
int i2 = 1_234_567_890; //JDK 7~
long l2 = 123_123_123_123_123L;
JDK 5 버전에 출시된 java.util.concurrent에 새로운 API가 추가되었습니다.
ForkJoinPool은 쓰레드 풀 서비스 중 하나입니다. 하나의 작업을 여러 개의 작업으로 분할(Fork)하고, 다시 합치면서(Join) 결과를 만들어 내는 방식입니다.
기존에 존재하는 java.util.Random 클래스는 멀티쓰레드 환경에서 동기화 비용 때문에 성능적인 문제가 있습니다. JDK 7버전에서는 쓰레드마다 각자의 랜덤 생성기를 가지도록 하는 ThreadLocalRandom 클래스가 출시되었습니다.
thread-safe한 Deque 클래스입니다.
Deque(double-end-queue) : 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료 구조
1.4버전에서 출시된java.nio 패키지가 업데이트 되었습니다. NIO API에서 파일 경로를 다루기 위한 Path 클래스와 디렉토리를 다루는 Files 클래스가 출시되었습니다.
기존 버전에서는 1개의 catch 블럭에서 1개의 Exception만 잡을 수 있었던 것이 하나의 catch 블럭에서 여러 개의 Exception을 잡을 수 있도록 변경되었습니다. 아래와 같이 파이프 연산자를 사용해서 여러 개의 Exception type를 넣을 수 있습니다.
try{ //기존 버전
//...
} catch (IOException e){
//...
} catch (IndexOutOfBoundsException e1){
//...
}
try{ //JDK 7~
//...
} catch (IOException | IndexOutOfBoundsException e){
//...
}
새로운 방식의 GC가 출시되었습니다. 정확히는 JDK 6버전에 출시되었지만 7버전에서 정식으로 포함되었습니다. G1 GC는 JVM의 Heap 메모리를 동일한 크기의 여러 영역으로 나눠 객체를 할당하고, 영역이 꽉 차면 해당 영역에 대해 GC를 실행합니다.