1. 문자열 기반 switch 문
JDK 7부터 문자열을 switch 문의 조건으로 직접 사용할 수 있습니다.
String input = "test";
switch (input) {
case "test":
System.out.println("일치: test");
break;
case "test1":
System.out.println("일치: test1");
break;
default:
System.out.println("일치하지 않음");
break;
}
2. 리프트 타입 추론을 활용한 컬렉션 생성
생성자에서 매개변수화 타입을 생략할 수 있는 리프트 타입 추론(Lightweight Type Inference)이 도입되었습니다.
import java.util.*;
List<String> dataOld = new ArrayList<String>();
List<String> dataNew = new ArrayList<>(); // 타입 추론 by JDK 7
dataNew.add("월요일");
dataNew.add("화요일");
3. AutoCloseable 인터페이스와 try-with-resources
AutoCloseable 인터페이스를 구현한 객체는 try-with-resources 구문 안에서 자동으로 close() 메서드가 호출됩니다.
interface AutoCloseable {
void close() throws Exception;
}
class TextProcessor implements AutoCloseable {
private BufferedReader reader;
public TextProcessor(String path) throws IOException {
reader = new BufferedReader(new FileReader(path));
}
public String readLine() throws IOException {
return reader.readLine();
}
@Override
public void close() throws Exception {
if (reader != null) reader.close();
}
}
// 자동 자원 해제
try (TextProcessor tp = new TextProcessor("input.txt")) {
String line;
while ((line = tp.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
}
4. 시스템 정보 조회 편의 메서드
System 클래스에 새로운 유틸리티 메서드들이 추가되었습니다.
System.getProperty("java.io.tmpdir")→ 임시 디렉터리System.getProperty("java.home")→ JRE 설치 경로System.getProperty("user.home")→ 사용자 홈 디렉터리System.getProperty("user.dir")→ 프로세스 시작 디렉터리
5. Boolean 타입 관련 유틸리티 메서드
Booleans 클래스는 null 안전한 조작 메서드를 제공합니다.
Booleans.negate(Boolean b): 부정 연산Booleans.and(Boolean[] arr),or(),xor(): 논리 연산
6. 문자 비교 개선
Character.equalsIgnoreCase(char a, char b) 메서드는 대소문자를 무시하고 비교합니다.
boolean result = Character.equalsIgnoreCase('A', 'a'); // true
7. 안전한 산술 연산
Math 패키지에 오버플로/언더플로를 예방하는 안전한 연산 메서드가 추가되었습니다.
Math.safeAdd(int, int),safeAdd(long, long)Math.safeSubtract(long, long),safeSubtract(int, int)Math.safeMultiply(int, int),safeMultiply(long, long)Math.safeNegate(int),safeNegate(long)Math.safeToInt(long)
8. 숫자 리터럴에 밑줄 사용
가독성을 위해 숫자 리터럴에 밑줄('_')을 삽입할 수 있습니다.
long population = 8_000_000_000L; // 80억
int hexVal = 0xFF_EC_DE;
int binaryVal = 0b1010_1101;
9. 이진수 리터럴 지원
0b 또는 0B로 시작하는 리터럴은 2진수로 해석됩니다.
int flag = 0b1010; // 10
10. 다중 예외 처리(catch 블록 통합)
하나의 catch 블록으로 복수의 예외 타입을 처리할 수 있습니다.
try {
methodThatMayThrowExceptions();
} catch (IOException | SQLException | ClassNotFoundException e) {
logger.error("예외 발생", e);
throw new RuntimeException(e);
}
11. 가변 인자(catch-all) 메서드 호출 시 경고 개선
비인스스티션 파라미터와 가변 인자 조합 시 발생하던 불필요한 경고가 더 정밀하게 표시됩니다.
12. Objects 유틸리티 클래스 추가
Objects 클래스는 null-safe 한 메서드를 제공합니다.
Objects.toString(obj): obj가 null이면 "null"을 반환Objects.equals(a, b): a, b 둘 다 null일 경우도 안전하게 비교Objects.hash(...): 해시 코드 생성
String name = Objects.toString(null, "기본값"); // "기본값"
boolean eq = Objects.equals(null, null); // true