Stream 연산들은 매개변수로 함수형 인터페이스(Functional Interface)를 받도록 되어있다.
그리고 람다식은 반환값으로 함수형 인터페이스를 반환하고 있다.
그렇기 때문에 우리는 Stream API를 정확하게 이해하기 위해 람다식과 함수형 인터페이스에 대해 알고 있는 것이 좋다.
람다식이란 함수를 하나의 식(expression)으로 표현한 것이다.
함수를 람다식으로 표현하면 메소드의 이름이 필요없기 때문에, 람다식은 익명 함수(Anonymous Function)의 한 종류라고 볼 수 있다.
함수의 이름이 없는 함수로, 익명함수들은 모두 일급 객체이다.
일급 객체인 함수는 변수처럼 사용가능하며 매개 변수로 전달이 가능하는 등의 특징을 가지고 있다.
// 기존의 방식
반환타입 메소드명(매개변수, ...) {
실행문
}
// 예시
public String Hello() {
return "Hello World!";
}
////////////////////////////////////////////////////////////
// 람다 방식
(매개변수...) -> { 실행문... }
// 예시
() -> "Hello World!";
이렇게 람다식이 등장하게 된 이유는 불필요한 코드를 줄이고, 가독성을 높이기 위함이다.
컴파일러가 문맥을 살펴 타입을 추론한다.
또한 람다식으로 선언된 함수는 1급 객체이기 때문에 Stream API의 매개변수로 전달이 가능해진다.