자바는 전통적으로 객체 지향형 프로그래밍이었으나 자바8 부터 이와 상극에 있는 함수형 프로그래밍도 도입할 수 있게 됨
프로그래밍 언어의 핵심은 값(일급 시민)을 바꾸는 것
이급 시민(메서드 , 클래스) 그 자체는 값이 될 수 없었다
자바8은 이러한 메서드 값으로 취급할 수 있게 해 프로그래밍을 편하게 하였다
File[] hiddenFiles = new File(".").listFiles(File::isHidden);
기존에는 코드 전체를 복사 붙여넣기를 했어야 했는데, 이는 유지보수적 측면에서 좋지 않음
함수를 값으로 취급하여서 함수만 고치면 이 함수를 사용하는 부분이 자동적으로 고쳐져서 유지보수가 좋아짐
람다를 활용해서 여러번 사용하지 않을 함수는 굳이 구현할 필요가 없어졌다.
이전 버전의 자바에서는 멀티스레딩 방식으로 코드를 짜는것이 쉽지 않음
여러 스레드가 공유된 데이터에 접근하기 때문에 문제가 발생할 수 있음
스트림을 통해 ‘반복적인 코드’, ‘멀티코어 활용’ 어려움 이라는 문제를 해결
포킹을 통해 처리해야 될 데이터를 나누고 cpu에서 각각 처리 후 합치는 방식
외부에서 만들어진 컴포넌트를 이용해 시스템을 구축하는 것이 일반적
자바9: 모듈을 정의하는 문법을 제공
자바8: 인터페이스를 쉽게 바꿀 수 있도록 디폴트 메서드를 제공
자바8에서는 구현 클래스에서 구현하지 않아도 되는 메서드를 인터페이스에 추가 가능
메서드 본문은 클래스 구현이 아니라 인터페이스의 일부로 포함
디폴트 메서드를 활용해 기존 코드를 건드리지 않고 인터페이스 설계를 자유롭게 확장 가능
Optional: 값이 없는 상황을 어떻게 처리할지 명시적으로 구현하는 메서드를 포함해 NullPointer 익셉션 피할 수 있게 도와준다