개발/자바

Java 1.7과 Java 1.8의 주요 변경 사항 비교 정리

피터JK 2025. 1. 21. 09:34
728x90

Java 1.7과 Java 1.8 비교 정리

구분 Java 1.7 Java 1.8
람다 표현식 지원하지 않음 함수형 프로그래밍 스타일을 지원하는 람다 표현식 도입.
스트림 API 기존 for, while 루프 사용 데이터 처리에 선언적 방식을 지원하는 스트림 API 추가.
Optional 클래스 null 확인은 수동으로 처리해야 함 Optional 클래스를 도입하여 null 처리 간소화.
인터페이스 인터페이스에는 메서드 정의만 가능. 구현체를 포함할 수 없음 디폴트 메서드와 정적 메서드 도입으로 인터페이스에 구현체를 포함 가능.
날짜와 시간 처리 java.util.Date, java.util.Calendar 사용. 불편하고 복잡함 java.time 패키지 도입으로 편리하고 직관적인 날짜와 시간 처리 가능.
Switch문에서 문자열 지원 문자열을 switch에서 사용할 수 없음 switch 문에서 문자열 사용 가능.
Try-with-Resources 지원하지 않음 리소스 자동 관리를 지원하는 Try-with-Resources 추가.
숫자 리터럴 숫자 리터럴에 밑줄 사용 불가 숫자 리터럴에 밑줄(_) 사용 가능으로 가독성 향상.
메서드 레퍼런스 지원하지 않음 메서드 레퍼런스를 통해 기존 메서드 호출을 간결하게 표현 가능.
NIO.2 기존 java.io를 사용, 파일 작업이 비교적 복잡 NIO.2 API를 통해 파일 및 디렉토리 작업 간소화.
메모리 관리 PermGen 영역 사용 PermGen 제거, Metaspace로 대체하여 메모리 관리 개선.
멀티 캐치 블록 하나의 catch 블록에서 하나의 예외만 처리 가능 하나의 catch 블록에서 여러 예외를 처리 가능.

주요 기능 비교 예시 코드

1. 람다 표현식

  • Java 1.7
    람다 표현식 미지원, 익명 클래스로 구현.
List<String> list = Arrays.asList("a", "b", "c");
for (String s : list) {
    System.out.println(s);
}
  • Java 1.8
    람다 표현식 사용으로 코드 간소화.
List<String> list = Arrays.asList("a", "b", "c");
list.forEach(s -> System.out.println(s));

2. 스트림 API

  • Java 1.7
    기존 반복문을 사용해 필터링 및 정렬 처리.
List<String> names = Arrays.asList("John", "Jane", "Jake");
List<String> filtered = new ArrayList<>();
for (String name : names) {
    if (name.startsWith("J")) {
        filtered.add(name);
    }
}
Collections.sort(filtered);
for (String name : filtered) {
    System.out.println(name);
}
  • Java 1.8
    스트림 API를 사용해 선언적으로 처리.
List<String> names = Arrays.asList("John", "Jane", "Jake");
names.stream()
     .filter(name -> name.startsWith("J"))
     .sorted()
     .forEach(System.out::println);

3. Optional 클래스

  • Java 1.7
    null 처리 시 수동으로 확인 필요.
String value = getValue();
if (value != null) {
    System.out.println(value);
}
  • Java 1.8
    Optional 클래스 사용.
Optional<String> value = Optional.ofNullable(getValue());
value.ifPresent(System.out::println);

4. 날짜와 시간 처리

  • Java 1.7
    Calendar 사용.
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());
  • Java 1.8
    java.time API 사용.
LocalDate date = LocalDate.now();
System.out.println(date);

 

728x90