자바 8 및 그 이후의 기능

자바 8 및 그 이후 버전들은 자바 언어와 플랫폼에 많은 중요한 기능 개선과 신기능을 도입하여 개발 생산성과 코드 가독성을 크게 향상시켰습니다.

아래에서는 자바 8을 시작으로 이후 주요 버전에 추가된 기능들을 중심으로 정리하였습니다.

--- 자바 8 (Java SE 8, 2014년 출시) 자바 8은 자바 역대 버전 중 가장 큰 혁신을 가져온 버전으로 평가받으며, 주요 특징은 다음과 같습니다.

1. 람다 표현식 (Lambda Expressions) - 함수형 프로그래밍 스타일을 도입하여 익명 함수를 간결하게 표현 가능. - 기존 익명 클래스(Anonymous Class)를 대체하며 코드가 훨씬 간결하고 가독성이 좋아짐. - 문법: `(parameters) -> expression` 또는 `(parameters) -> { statements }` ```java List list = Arrays.asList("a", "b", "c"); list.forEach(s -> System.out.println(s)); ``` 2. 함수형 인터페이스 (Functional Interfaces) - 단 하나의 추상 메서드만을 가진 인터페이스에 `@FunctionalInterface` 애노테이션을 붙여 람다 표현식과 함께 사용. - `java.util.function` 패키지에 여러 미리 정의된 함수형 인터페이스 제공 (e.g. `Predicate`, `Function`, `Consumer`, `Supplier` 등). 3. 스트림 API (Streams API) - 컬렉션 데이터를 선언형으로 처리할 수 있는 API. - 데이터 소스를 추상화하여 필터링(filter), 매핑(map), 정렬(sorted), 집계(reduce) 등 다양한 작업을 파이프라인으로 처리. - 병렬 처리(parallel stream)를 지원하여 멀티코어 프로세서 활용 가능. ```java List names = Arrays.asList("Alice", "Bob", "Charlie"); List filtered = names.stream() .filter(name -> name.startsWith("A")) .collect(Collectors.toList()); ``` 4. Optional 클래스 - null에 대한 처리를 안전하게 하기 위해 도입. - null로 인한 `NullPointerException` 방지 및 명시적 null 처리 유도. ```java Optional optional = Optional.ofNullable(getName()); optional.ifPresent(name -> System.out.println(name)); ``` 5. 새로운 날짜와 시간 API (`java.time` 패키지) - 기존 `java.util.Date`와 `java.util.Calendar`의 문제점을 개선. - 불변(immutable) 객체로 설계되어 스레드 안전. - `LocalDate`, `LocalTime`, `LocalDateTime`, `ZonedDateTime` 등 다양한 날짜/시간 클래스 제공. 6. 인터페이스의 디폴트 메서드 (Default Methods) - 인터페이스에 `default` 키워드를 이용해 구현을 포함한 메서드를 선언 가능. - 기존 인터페이스에 새로운 메서드를 추가해도 구현 클래스를 깨뜨리지 않도록 설계. --- 자바 9 (2017년 출시) 1. 모듈 시스템 (Project Jigsaw) - `module-info.java`를 통한 모듈 관리로 코드의 캡슐화와 배포 단위 개선. - JDK 내부도 모듈화되어 경량화 및 보안성 강화. 2. JShell (인터랙티브 REPL) - 자바 코드를 즉시 실행하며 테스트할 수 있는 셸 환경 제공. - 학습 및 프로토타입 작성에 유용. 3. 인터페이스 private 메서드 - 인터페이스 내에서 구현하는 private 메서드를 지원해 디폴트 메서드와 정적 메서드의 코드 중복 감소. 4. 스트림 API 개선 - `takeWhile()`, `dropWhile()`, `iterate()` 등 새로운 메서드 추가. --- 자바 10 (2018년 출시) 1. 지역 변수 타입 추론 (`var`) - 지역 변수 선언 시 자료형을 명시하지 않고 컴파일러가 추론하도록 허용. - 읽기 쉬운 코드 작성 가능. ```java var list = new ArrayList(); ``` 2. 가비지 컬렉션 개선 - 플랫폼에 따른 기본 GC 변경(G1 GC가 기본 GC 됨). --- 자바 11 (2018년 출시, LTS) 1. 문자열 메서드 추가 - `String` 클래스에 `isBlank()`, `lines()`, `strip()`, `repeat(int)` 등 유용한 메서드 추가. 2. HTTP 클라이언트 표준화 - 자바 9에서 도입된 HTTP/2 클라이언트 API (`java.net.http.HttpClient`)를 표준 API로 채택. 3. 실행 파일 생성 개선 - `.java` 파일만으로도 컴파일 없이 실행 가능 (`java Hello.java`). --- 자바 12 ~ 17 주요 개선 (LTS: 자바 17) 1. Switch 표현식 (자바 14) - `switch` 문을 표현식으로 사용 가능하며, 화살표 구문(`->`) 지원으로 간결화. ```java int numLetters = switch(day) { case MONDAY, FRIDAY, SUNDAY -> 6; case TUESDAY -> 7; default -> 0; }; ``` 2. 기록 클래스 (Records, 자바 16) - 불변 데이터 클래스 생성 시 보일러플레이트 코드 최소화. - 자동으로 생성자, getter, `equals()`, `hashCode()`, `toString()` 메서드 제공. ```java public record Point(int x, int y) { } ``` 3. 패턴 매칭 (Pattern Matching) - `instanceof`와 `switch`문에서 타입 검사 후 캐스팅을 자동화. ```java if (obj instanceof String s) { System.out.println(s.toUpperCase()); } ``` 4. 텍스트 블록 (Text Blocks, 자바 15) - 여러 줄 문자열 입력 시 """(triple quotes) 사용하여 가독성 향상. ```java String json = """ { "name": "Alice", "age": 30 } """; ``` --- 그 이후 버전 (자바 18~20) - 기능 미리보기(Preview Features) 가 활성화되어 새로운 언어 기능이 실험적으로 제공. - 주요 기능으로는 패턴 매칭 switch 완전 도입 , 외부 함수 인터페이스 (Foreign Function & Memory API) , 벡터 API 등이 있습니다.

- 자바는 6개월 주기로 신규 버전을 출시하며, 장기 지원(LTS) 버전은 3년마다 배포됩니다.

--- 요약 | 버전 | 주요 기능 및 특징 | |-------|------------------------------------------| | 자바 8 | 람다, 스트림, Optional, 새로운 시간 API, 인터페이스 디폴트 메서드 등 | | 자바 9 | 모듈 시스템, JShell, 인터페이스 private 메서드, 스트림 개선 | | 자바 10| 지역 변수 타입 추론 (`var`), GC 개선 | | 자바 11| HTTP 클라이언트, 문자열 메서드 추가, 런타임 실행 파일 | | 자바 14| Switch 표현식, 텍스트 블록 프리뷰 | | 자바 15| 텍스트 블록 공식 지원 | | 자바 16| 레코드 (Records), 패턴 매칭 개선 | | 자바 17| LTS 버전, sealed 클래스, 패턴 매칭 추가 | --- 자바 8이후 도입된 기능들은 자바 언어가 단순한 객체지향 언어에서 함수형 프로그래밍, 선언형 스타일을 지원하는 현대적인 언어로 진화하는 계기가 되었습니다.

최신 버전으로 갈수록 코드 간결화, 안전성, 성능 및 병행성 지원이 강화되고 있어, 개발하는 프로젝트의 필요에 따라 적절한 자바 버전을 선택해 사용하면 좋습니다.


관련 게시글

자바에서 병렬 처리를 구현하는 방법은 무엇인가요?

자바에서 병렬 처리는 여러 작업을 동시에 실행하여 프로그램의 성능과 응답성을 향상시키는 기법입니다....

문제 해결 및 면접 질문

문제 해결 및 면접 질문에 관한 글 --- 1. 문제 해결의 중요성 문제 해결 능력은 개인과...

자바에서 중복된 요소를 제거하는 방법은 무엇인가요?

자바(Java)에서 중복된 요소를 제거하는 방법에는 여러 가지가 있습니다. 주로 컬렉션프레임워크를 활용하...

자바 Collections에서 정렬하는 방법은 무엇인가요?

자바 Collections에서 정렬하는 방법에 대해 설명드리겠습니다. 자바에서는 컬렉션(Collection) 자료구조의...

자바의 메모리 누수 문제를 해결하는 방법은 무엇인가요?

자바의 메모리 누수 문제를 해결하는 방법 --- 1. 메모리 누수란? 자바는 가비지 컬렉션(GC)...

팩토리 패턴을 사용하여 주어진 문제를 해결해보세요.

팩토리 패턴을 사용하여 주어진 문제를 해결해보세요. --- 1. 팩토리 패턴이란? 팩토리 패턴...