JAVA 7 New Features 새로운 기능 변경사항 정리

JAVA 7 New Feature 새로운 기능 변경사항



Type Interface 다이아몬드(<>) 지시자 사용

제네릭 유형의 인스턴스 생성시 타입 생성이 가능하다. 이전에 new List<String, String>(); 으로 명시적으로 Type을 선언했던것과 달리 new List<>();로 타입 생략이 가능하다. (단, 선언이 아니라 생성에서만 가능)


소스코드


String in Switch

기존 switch 구문에서 int, enum, char 등 숫자형으로 변환 가능한 primitive 타입에 대해서만 switch구문에서 사용할 수 있었다면, JAVA7 부터는 String Type을 switch로 사용가능하게 되었다.


소스코드


Automatic Resource Management 자동 close 

DB Connection, File Stream등을 Open하는 경우 자원의 정상적인 반납을 위해서 finally블럭안에서 개별적으로 close 처리를 해주어야 했다. JAVA7 이후에 AutoClosable, Closeable인터페이스를 구현한 객체에 대해서 try 를 사용하는 경우 자동으로 close처리를 해주어 소스를 간결하게 작성할 수 있다.


아래와 같이 try블럭에 ()괄호 부분에 AutoClosable, Closeable 인터페이스를 구현한 오브젝트를 생성하여 주면 자동으로 close처리 된다.

  

try( // 인스턴스 생성) {

// 로지처리

} catch (Exception e) { 

// 에러처리

}


JAVA7 이전 소스코드


JAVA7 이후 소스코드



Underscore in Numeric literal 숫자에 _ 사용

숫자와 관련된 Type에 _로 구분자를 추가할 수 있게 되었다. 만약 100만 또는 10억의 숫자가 있는데 당신이 오른쪽에서 왼쪽으로 자릿수를 세어보지 않는다면 문자를 인식하는데 실수를 범하기 쉽고 어려울 것이다. 더이상 그럴 필요가 없다. Java 7에는 자릿수를 표시하기 위한 underscores(밑줄)이 포함되어있다. 


예를들면 1000을 선언할 때

int a = 1000;


JAVA 7에서는

int a = 1_000; 으로 선언이 가능하다.


단 숫자의 시작, 끝이나 소숫점 바로 뒤에는 붙일 수 없다.


사용가능 패턴


사용불가 패턴


Binary Literals with Prefix “0b”

숫자형에 0B(0b), 0, 0X(0x)를 앞에 붙임으로써 진수 표현이 가능하다.

  • 2진법은 0B 또는 0b
  • 8진법은 0
  • 16진법은 0X 또는 0x
소스코드



Catching Multiple Exception Type in Single Catch Block

try-catch 구문에서 여러개의 Exception을 잡는 경우 개별 catch블럭을 매번 선언해줘야 했는데, 하나의 Catch 블럭에서 여러개의 Exception을 잡을 수 있게 되었다. 다양한 Exception을 잡아서 동일한 패턴으로 처리할 때 소스코드가 훨씬 간결해 진다.


JAVA7 이전


JAVA7 이후


위처럼 catch( Exception1 | Excpetion2 e...) 으로 파이프연산자 | 를 이용하여 여러개의 Exception을 하나의 catch문으로 잡을 수 있다. 이 때  선언 된 Exception들이 하위클래스 관계라면 컴파일 에러가 발생하니 다른 유형의 Exception들만 파이프 | 로 연결하여 주어야 한다.


More Precise Rethrowing of Exception

메소드 선언시 catch 되지 않은 Exception을 throw할 수 있다. 이전에는 명시적으로 catch된 Exception만 throw할 수 있었다.

JAVA7 이전


JAVA7 이후


catch (Exception ex) 가 명시적으로 선언된 Exception 뿐만 아니라, catch되지 않은 ParseException, IOException도 throw 처리가 가능하다.

Java NIO 2.0

JDK7에서 java.nio.file 패키지가 추가되었다. 기본파일시스템에 접근도 가능하고 다양한 파일I/O 기능도 제공한다. 예를 들면 파일을 옮기거나 복사하거나 삭제하는 등의 유용한 메소드들을 제공하며, 파일속성이 hidden인지 체크도 가능하다. 또한 기본파일시스템에 따라 심볼릭링크나 하드링크도 생성 가능. 와일드카드를 사용한 파일검색도 가능하며 디렉토리의 변경사항을 감시하는 기능도 제공한다.
  • 파일을 이동
  • 파일 복사
  • 파일 삭제
  • 파일속성이 Hidden인지 체크도 가능
  • 심볼릭링크나 하드링크도 생성 가능
  • 와일드카드를 사용한 파일검색도 가능
  • 디렉토리의 변경사항을 감시하는 기능
  • 등등..

JAVA7 이전 IO를 이용한 파일복사


JAVA7 이후 NIO 2.0을 이용한 파일복사 


파일카피를 java.nio.file 패키지에서 기본지원 해주면서 굉장히 깔끔하게 소스코드가 작성이 가능해졌다. 또한 파일이나 디렉토리의 변경사항도 Event 방식으로 감지가 가능하다.


Fork&Join 프레임워크 지원

Fork & Join 프레임워크를 통해서 제공되는 일종의 쓰레드풀의 한 종류 이다. ForkJoinPool은 기본 개념은 큰 업무를 작은 업무 단위로 쪼개고, 그것을 각기 다른 CPU에서 병렬로 실행한후 결과를 취합하는 방식이다. 마치 분할정복 알고리즘과 흡사하다. 여러 CPU들을 최대한 활용하면서 동기화와 GC를 피할수 있는 여러 기법이 사용되었기 때문에, Java 뿐 아니라 Scala에서도 널리 쓰이고 있는 병렬처리 기법이다.  또한 C,C++을 위한 Thread Building Block(TBB) 나 C#의 Task Parallel Library또한 Fork Join Framework의 개념을 가지고 있다.

ForkJoinPool의 작업절차
  1. 큰 업무를 작은 단위의 업무로 쪼갠다.
  2. 부모 쓰레드로 부터 처리로직을 복사하여 새로운 쓰레드에서  쪼개진 업무를 수행(Fork) 시킨다.
  3. 2을 반복하다가, 특정 쓰레드에서 더이상 Fork가 일어나지 않고 업무가 완료되면 그 결과를 부모 쓰레드에서 Join하여 값을 취합한다.
  4. 3을 반복하다가 최초에 ForkJoinPool을 생성한 쓰레드로 값을 리턴하여 작업을 완료한다.


G1 Garbage Collector

G1 Garbage Collection으로 알려진 새로운 Garbage Collector가 추가되었다.(G1은 Garbage First의 약자) G1 GC는 바둑판의 각 영역에 객체를 할당하고 GC를 실행한다. 그러다가, 해당 영역이 꽉 차면 다른 영역에서 객체를 할당하고 GC를 실행한다. 즉, 지금까지 설명한 Young의 세가지 영역에서 데이터가 Old 영역으로 이동하는 단계가 사라진 GC 방식이라고 이해하면 된다. G1 GC는 장기적으로 말도 많고 탈도 많은 CMS GC를 대체하기 위해서 만들어 졌다.

  • G1 GC는 Garbage가 가장 많은 영역의 정리를 수행한다
  • 메모리 집중적인 어플리케이션에 더 큰 Through put을 제공


참고 : 

http://www.hanbit.co.kr/network/category/category_view.html?cms_code=CMS9451408435

http://www.jpstory.net/2014/06/28/java-7-features/

http://pigbrain.github.io/java/2016/03/28/Java7_on_Java

http://creatordev.tistory.com/72

http://blog.naver.com/PostView.nhn?blogId=2feelus&logNo=220732310413

이 글을 공유하기

댓글

Email by JB FACTORY