Java7에서 변경된 것들
초기버전의 java를 쭉 사용해 왔다면, 하나하나 기능이 추가될 때마다 그 유용함과 편리함을 몸소 체험했겠지만, 그동안 개발을 하면서 사용한 버전이 6이나 7이 대부분이었다보니 그럴 일이 없었던 것 같다.
그런 의미에서 java7에 오면서 새롭게 추가되거나 변경된 사항들에 대해서 살펴보려 한다.
java7에서 변경된 것들
숫자 표시 방법 보완
- 이전 버전까지는 0을 앞에 넣으면 8진수, 0x를 앞에 넣으면 16진수로 인식하는 것이 가능했다. java7부터는 아무 접두사가 없는 숫자는 10진수, 0b를 앞에 넣으면 2진수로 인식하는 것이 추가됐다.
- _를 사용하여 숫자의 단위를 잘라서 표현할 수 있다. 가독성이 좋아졌다.
switch문에서 String 사용
- java6까지는 switch-case에서 정수형만 사용가능했었다. 7부터 String도 사용이 가능하다.
제네릭을 쉽게 사용할 수 있는 Diamond
- 기존에는 제네릭 사용 시에 <>안에 타입을 입력했어야 했다. 7부터는 그럴 필요가 없다. 왜냐하면 이미 변수 선언부에서 타입을 지정해놨기 때문이다.
예외가 보완되었다.(1)
이전까지는 예외처리르 ㄹ위해 try-catch문장을 사용했다. 이 부분에서 catch로 잡아주는 코드의 가독성이 떨어졌다.
public void scanFile(String fileName, String encoding){
Scanner scanner = null;
try{
scanner = new Scanner(new File(fileName), encoding);
System.out.println(scanner.nextLine());
}catch(IllegalAccessException iae){
iae.printStackTrace();
}catch(FileNotFoundException ffe){
ffe.printStackTrace();
}catch(NullPointerException npe){
npe.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}finally{
if(scanner != null){
scanner.close();
}
}
}
위의 예시를 보면 파일명이 한글일 경우 타입명시를 해줘야 한다. 인코딩 타입이 존재하지 않을 경우에, IllegalArgumentException이 발생할 것이고, 파일이 존재하지 않을 경우에는 FileNotFoundException이 발생할 것이다. 파일명이나 인코딩 타입이 NullPointerException이 발생할 수 있다.
지금까지는 일일이 발생할 만한 case에 맞춰서 catch블록을 만들어 처리하고, 마지막에 Exception 클래스로 catch해주는 것이 일반적이었다.
그러나 이제 java7부터는 다음과 같이 처리할 수 있다.
public void newScanFile(String fileName, String encoding){
Scanner scanner = null;
try{
scanner = new Scanner(new File(fileName), encoding);
System.out.println(scanner.nextLine());
}catch(IllegalArgumentException | FileNotFoundException | NullPointerException exception){
exception.printStackTrace();
}finally{
if(scanner != null){
scanner.close();
}
}
}
예외가 보완되었다.(2)
try-with-resource(리소스와 함께 처리하는 try문장)이다.
아래 예시를 보자.
public void newScanFileTryWithResource(String fileName, String encoding){
try(Scanner scanner = new Scanner(new File(fileName), encoding)){
System.out.println(scanner.nextLine());
}catch(IllegalArgumentException | FileNotFoundException | NullPointerException exception){
exception.printStackTrace();
}
}
이 구문의 특징은 다음과 같다.
- try의 소괄호 내에서 예외가 발생할 수 있는 객체에서, close()를 이용해 닫아야할 필요가 있을 때, AutoCloseable을 구현한 객체는 finally문장에서 별도로 처리할 필요가 없다는 것을 볼 수 있다. (AutoCloseable에 대해서는 아래에서 이어 말하겠다. )
AutoCloseable
java5부터 추가된 java.io.Closeable인터페이스를 구현한 클래스들은 명시적으로 close()메소드를 사용하여 닫아줘야했지만,
java7에 추가된 AutoCloseable 인터페이스를 상속한 클래스들은 앞서 살펴본 try-with-resource구문을 사용할 수 있다.
AutoCloseable을 상속한 클래스들은 아래와 같다. (이외에도 많다.)
- java.nio.channels.FileLock
- java.beans.XMLEncoder
- java.beans.XMLDecoder
- java.io.ObjectInput
- java.io.ObjectOutput
- java.util.Scanner
- java.sql.Connection
- java.sql.ResultSet
- java.sql.Statement
출처 : 자바의 신(이상민 저)
Author And Source
이 문제에 관하여(Java7에서 변경된 것들), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dev_isaac/java7에서-변경된-것들저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)