JDK 7 메모리 및 코드 가독성 개선 주요 기능

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

태그: jdk7 Try-with-resources autocloseable numeric-underscore unicode

8월 16일 03:45에 게시됨