자바 8 인 액션
1
회사에서 자바를 사용할 일이 있어서 이 책을 가지고 자바 8을 공부했다.
2
내용이 아주 훌륭하고, 책 중간 중간에 그려진 그림은 어려운 내용을 아주 쉽게 설명하고 있기 때문에 많은 도움이 되었다.
3
자바 8을 공부한다면 강추!
조금 다른 관점에서 보면 결국 스트림 API 덕분에 다른 두 가지 기능, 즉 메서드에 코드를 전달하는 간결 기법(메서드 레퍼런스와 람다)와 인터페이스의 디폴트 메서드가 추가되었음을 알 수 있다.
[…] 메서드에 코드를 전달하는 자바 8 기법은 함수형 프로그래밍에서 위력을 발휘한다. 자바 8에서는 코드를 전달하거나 조합해서 강력한 프로그래밍 도구로 활용할 수 있다는 것을 확인할 수 있다.
첫 번째 프로그래밍 개념은 스트림 처리다. […] 자바 8에 추가된 두 번째 프로그램 개념은 코드 일부를 API로 전달하는 기능이다. […] 세 번째 프로그래밍의 개념은 ‘병렬성을 공짜로 얻을 수 있다’라는 말에서 시작된다. […] 공유되지 않는 가변 데이터, 메서드와 함수 코드를 다른 메서드로 전달하는 두 가지 기능은 함수형 프로그래밍 패러다임의 핵심적인 사항 […] 공유되지 않은 가변 데이터 요구사항을 준수하는 메서드는 인수를 결과로 변환하는 동작만 수행한다. 즉, 수학적인 함수처럼 정해진 기능만 수행하며 다른 부작용은 일으키지 않는다.
람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다. 람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다.
람다 표현식의 시그너처를 서술하는 메서드를 함수 디스크립터라고 부른다.
람다 표현식에서는 익명 함수가 하는 것처럼 자유 변수를 활용할 수 있다. 이와 같은 동작을 람다 캡처링이라고 부른다. […] 하지만 자유 변수에도 약간의 제약이 있다. 람다는 인스턴스 변수와 정적 변수를 자유롭게 캡처 할 수 있다. 하지만 그러려면 지역 변수는 명시적으로 final로 선언되어 있어야 하거나 실질적으로 final로 선언되 변수와 똑같이 사용되어야 한다. 즉, 람다 표현식은 한 번만 할당할 수 있는 지역 변수를 캡처할 수 있다.
스트림이란 정확히 뭘까? 스트림이란 ‘데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소’로 정의할 수 있다. […] 스트림을 시간적으로 흩어진 값의 집합으로 간주할 수 있다. 반면 컬렉션은 특정 시간에 모든 것이 존재하는 공간에 흩어진 값으로 비유할 수 있다.
요약하면 flatmap 메서드는 스트림의 각 값을 다른 스트림으로 만든 다음에 모든 스트림을 하나의 스트림으로 연결하는 기능을 수행한다.
자바 8에서는 호환성을 유지하면서 API를 바꿀 수 있도록 새로운 기능인 디폴트 메서드를 제공한다.