[Java] Java 8 특징 및 Java 11과 비교

뿌이·2024년 9월 24일
1

Java 개념

목록 보기
19/19
post-thumbnail

Java 8은 2014년에 출시된 버전으로, Java 언어의 큰 변화를 가져온 중요한 릴리스입니다. 주요 특징은 다음과 같습니다:

Java 8 특징(4번까지 중요)

1. 람다 표현식 (Lambda Expressions)

함수를 더 간결하게 표현할 수 있게 하는 기능으로, 코드의 가독성과 유지보수성을 높입니다. 주로 익명 클래스 대신 사용할 수 있습니다.

//예시: 간단한 람다 표현식
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.forEach(n -> System.out.println(n));

2. 스트림 API (Stream API)

대용량 데이터를 처리할 때 유용한 API로, 데이터 필터링, 매핑, 집계 작업을 간결하게 할 수 있습니다. 내부 반복을 사용하여 멀티코어 환경에서 성능을 개선할 수 있습니다.
병렬처리로 좀 더 빠르게 사용 가능함

// 예시: 스트림을 이용한 데이터 필터링
List<String> strings = Arrays.asList("apple", "", "banana", "cherry");
List<String> filtered = strings.stream()
                               .filter(s -> !s.isEmpty())
                               .collect(Collectors.toList());

3. 기본 메서드 (Default Methods)

인터페이스에 메서드 구현을 추가할 수 있는 기능입니다. 기존 인터페이스를 구현하는 클래스에 영향을 주지 않고도 인터페이스에 새로운 메서드를 추가할 수 있습니다.

interface MyInterface {
    default void print() {
        System.out.println("This is a default method");
    }
}

Java 8 이전에는 인터페이스에서 메서드를 선언할 수 있었지만, 모든 메서드는 반드시 추상 메서드여야 했습니다. 즉, 인터페이스를 구현하는 모든 클래스는 해당 메서드들을 구현해야 했죠. 그러나 Java 8에서 람다식과 스트림 API 같은 새로운 기능을 도입하면서 기존의 많은 인터페이스에 새로운 메서드를 추가할 필요가 생겼습니다.

문제는 새로운 메서드를 인터페이스에 추가하면, 그 인터페이스를 구현한 모든 클래스에서 이 새로운 메서드를 구현해야 하는 부담이 생긴다는 것입니다. 이를 해결하기 위해, default method가 도입되었습니다. 이제 인터페이스는 추상 메서드뿐 아니라 기본적으로 구현된 메서드도 가질 수 있게 되었습니다.

4. Optional 클래스

null 참조로 인한 오류를 방지하기 위해 도입된 클래스(wrapper class)입니다. 값이 없을 경우 null 대신 Optional.empty()를 사용하여 안전하게 처리할 수 있습니다.

Optional<String> optional = Optional.ofNullable(null);
System.out.println(optional.orElse("Default value"));

5. 새로운 날짜와 시간 API (java.time 패키지)

java.util.Date와 java.util.Calendar의 복잡한 사용을 대체하기 위해 직관적이고 명확한 날짜 및 시간 API가 추가되었습니다.

LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1990, Month.JANUARY, 1);

6. 병렬 처리 개선

스트림 API를 통해 간단하게 병렬 처리를 수행할 수 있으며, ForkJoinPool을 사용하여 멀티코어 프로세서를 활용할 수 있게 되었습니다.

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.parallelStream().forEach(System.out::println);

7. Nashorn JavaScript 엔진

Java 8에는 JavaScript를 실행할 수 있는 새로운 엔진인 Nashorn이 포함되어 Java와 JavaScript 간의 상호 운용성이 향상되었습니다.

이러한 특징들은 Java 8을 더 효율적이고 현대적인 프로그래밍 언어로 만드는 데 큰 기여를 했습니다.

Java 8과 Java 11 비교(3번까지 중요)

1. 람다 표현식 & 스트림 API

Java 8: 람다 표현식과 스트림 API를 처음 도입했습니다. 이는 함수형 프로그래밍 스타일을 지원하고 데이터 처리를 더 간결하게 만들었습니다.
Java 11: 람다 표현식은 그대로 유지되지만, var 키워드를 람다에서 사용할 수 있는 기능이 추가되었습니다.

차이점: Java 11에서는 var 키워드로 가독성을 높일 수 있다는 점이 다릅니다.

2. HTTP Client API

Java 8: 기본적으로 HTTP 요청을 처리하는 공식 API가 없었기 때문에, HttpURLConnection을 사용하거나 외부 라이브러리(Apache HttpClient 등)를 사용해야 했습니다.
Java 11: 새로운 HttpClient API가 도입되어 동기 및 비동기 방식으로 간편하게 HTTP 통신을 할 수 있습니다.

차이점: Java 11은 현대적인 HTTP 통신을 공식 API로 지원하며, 이는 Java 8에서는 외부 라이브러리에 의존해야 했던 부분입니다.

3. String 클래스 메서드

Java 8: 문자열 처리를 위한 기본적인 메서드들(trim(), split(), 등)만 제공했습니다.
Java 11: 새로운 String 관련 메서드가 추가되었습니다. isBlank(), strip(), lines(), repeat() 등 문자열 조작과 처리를 더 쉽게 할 수 있습니다.

차이점: Java 11에서 문자열 처리가 더욱 간단하고 유연해졌습니다.

4. Garbage Collection (GC)

Java 8: 기본적으로 Parallel GC가 사용되었으며, 다른 GC 옵션으로는 G1이 있었지만, 상대적으로 성숙하지 않았습니다.
Java 11: 더 발전된 G1 GC가 기본 설정으로 되어 있으며, 새로운 ZGC(Z Garbage Collector)가 도입되었습니다. ZGC는 매우 큰 힙 메모리를 가진 애플리케이션에서 짧은 일시 정지를 제공하도록 설계되었습니다.

차이점: Java 11은 GC 성능과 확장성에서 큰 개선을 이루었습니다.

5. 모듈 시스템

Java 8: 모듈 시스템이 없고, 모든 클래스가 단일 클래스패스에서 관리되었습니다.
Java 11: Java 9에서 도입된 모듈 시스템을 유지합니다. 이를 통해 애플리케이션을 모듈화하고, 더 나은 구조화 및 클래스 로딩 성능을 제공합니다. Java 11에서는 더 이상 Java EE 및 CORBA 모듈을 포함하지 않습니다.

차이점: Java 11은 모듈 시스템을 제공하지만, 이는 Java 8에는 없습니다.

6. JDK의 크기

Java 8: JDK에 포함된 많은 부분들이 크고 복잡했습니다. 예를 들어, Java EE 및 CORBA 같은 모듈이 포함되어 있었습니다.
Java 11: Java EE와 CORBA 모듈이 제거되었고, 더 이상 포함되지 않기 때문에 JDK의 크기가 줄어들었고, 더 가벼운 환경에서 실행이 가능합니다.

차이점: Java 11은 Java EE 및 CORBA 모듈을 제거하여 더 가벼운 JDK를 제공합니다.

7. 배포 형식 및 라이선스

Java 8: Oracle JDK는 상업적으로 무료로 사용할 수 있었습니다.
Java 11: Oracle JDK는 상업용으로 유료 라이선스를 요구하며, 대신 OpenJDK가 무료로 제공됩니다. Java 11부터 Oracle JDK는 상업적 사용에 비용이 발생하므로, 많은 개발자들이 OpenJDK로 전환하고 있습니다.

차이점: Java 11에서는 상업용으로 Oracle JDK를 사용할 경우 라이선스 비용이 발생합니다.

8. 명령어 줄에서 소스 파일 실행

Java 8: .java 파일을 실행하려면 먼저 컴파일(javac)한 후 실행(java)해야 했습니다.
Java 11: 소스 파일을 직접 실행할 수 있습니다. 이는 스크립트 작업을 하거나 테스트 코드를 실행할 때 유용합니다.

차이점: Java 11에서는 소스 파일을 컴파일 없이 바로 실행할 수 있습니다.

9. 새로운 API 및 개선

Java 8: 다양한 새로운 API가 도입되었지만, HttpClient나 파일 처리 관련해서는 외부 라이브러리 또는 복잡한 구현이 필요했습니다.
Java 11: HttpClient API, 파일 관련 메서드, Optional.isEmpty(), LocalDate.datesUntil() 등 다양한 편의 기능이 추가되었습니다.

차이점: Java 11에서는 최신 API와 편의 기능이 더 많이 추가되었습니다.

요약

Java 8은 람다 표현식, 스트림 API, Optional, 새로운 날짜 및 시간 API 등 중요한 개념을 도입하면서 Java 언어의 큰 변화를 가져왔습니다.
Java 11Java 8에서의 변화를 발전시키고, 새로운 기능과 성능 최적화, 모듈 시스템, 더 가벼운 JDK, 상업적인 라이선스 변화 등 현대적이고 확장 가능한 애플리케이션을 위한 추가 기능을 제공합니다.

profile
기록이 쌓이면 지식이 된다.

0개의 댓글

관련 채용 정보