자바 8
- 람다 표현식
- 자바 언어 역사상 가장 큰 변화가 자바 8의 람다 채용이다. 별도의 익명 클래스를 만들어서 선언하던 방식을 람다를 통해 대폭 간소화할 수 있으며 함수형 프로그래밍, 스트림 API 그리고 컬렉션 프레임워크의 개선 등에 영향을 주었따. 영향이 큰 만큼 개발자들의 저항이 가장 심한 신기술이기도 하다.
-
함수형 인터페이스
- 람다와 더불어서 자바 8의 큰 변화 중 하나이다. 함수형 인터페이스는 람다 표현식을 사용할 때 만들어야 하는 하나의 메서드를 가진 인터페이스 생성을 줄여준다. 또한 람다 표현식을 위한 인터페이스 사용 시 표준 가이드 및 의사 소통 용어로도 사용한다.
-
메서드 참조
- 기존에는 값과 객체 참조만을 메서드의 인수로 전달할 수 있었지만 자바 8부터는 특정 메서드를 메서드의 인수로 전달할 수 있게 되었다.
궁극적으로는 복잡한 람다 표현식을 메서드 참조로 간략하게 만들 수 있고 재사용성도 높일 수 있으며 람다에 익숙하지 않은 개발자도 소스 코드를 쉽게 해석할 수 있다.
-
스트림 API
- 람다 표현식, 함수형 인터페이스 그리고 메서드 참조를 이용한 최종 산출물이 바로 스트림 API이다. 앞서 설명한 3가지 기술이 스트림 API를 위해 만들어진 것이라는 얘기가 있을 정도로 스트림 API는 혁신적인 기능을 제공한다. 스트림 API를 이용하면 기존 컬렉션 프레임워크를 이용할 때보다 간결하게 코드를 작성할 수 있으며 병렬 처리, 스트림 파이프라인 등을 통해 하나의 문장으로 다양한 데이터 처리 기능을 구현할 수 있다.
-
날짜와 시간 API
- 자바 8에서 새롭게 선보이는 날짜와 시간 API는 기존 Date와 Calendar 클래스의 기능 부족과 비표준적인 명명 규칙, 그리고 일관되지 못한 속성값 등의 문제를 해결하기 위해 새롭게 추가되었다.
명명 규칙을 새로 정의하고 각 클래스 간의 역할을 분명히 분배하여 개발자들의 혼란을 최소화하였으며 멀티 스레드 환경에서의 안전성을 보장하고 있다.
-
인터페이스 개선
- 자바 8 이전의 인터페이스에는 구현 내용이 없는 public 메서드 명세서만 작성이 가능하고 인터페이스를 구현한 클래스에서 상세 내용을 정의해야 했다. 때문에 인터페이스에 메서드를 추가하면 이를 구현한 모든 클래스에 컴파일 에러가 발생했다. 특히 컬렉션 프레임워크와 같이 인터페이스를 기반으로 동작하는 프레임워크는 기능 추가나 개선을 어렵게하는 가장 대표적인 요인이였다. 자바 8에서는 default 키워드를 잉ㅇ해서 인터페이스에 메서드를 추가하고 직접 내용을 정의할 수 있어서 인터페이스의 메서드 추가로 인한 문제점을 해소할 수 있다.
-
Optional
- 자바를 개발하면서 null값 때문에 고민해 보지 않은 개발자가 없을 정도로 null은 굉장히 중요한 부분이다. 자바 8에서는 null 값을 확인하고 관리할 수 있는 새로운 기능을 제공한다.
-
CompletableFuture
- 자바 8에서 멀티 스레드 프로그래밍 시에 중요한 기능 중 하나가 CompletableFuture이다. CompletableFuture는 기존 Future 인터페이스에서 제공하는 기능을 개선하였다.