Stream 연산자들은 매개변수로 함수형 인터페이스를 받도록 되어있다
그리고 람다식은 반환값으로 함수형 인터페이스를 반환하고 있다
그렇기 때문에 우리는 Strem API를 정확히 이해하기 위해서는 람다식과 함수형 인터페이스에 대해 알아야 한다!
람다식이란?
함수를 하나의 식(expression)으로 표현한 것
함수를 람다식으로 표현하면 메서드의 이름이 필요 없기 때문에, 람다식은 익명(Anonymous Function) 함수의 한 종류 하고 볼 수 있다.
익명 구현 객체
이름이 없는 인터페이스 구현 객체
// 기존의 방식
반환타입 메소드명 (매개변수, ...){
실행문
}
// 예시
public String hello(){
return "Hello World!"
}
람다식으로 작성 시 메서드명이 불필요하며, 다음과 같이 괄호 ()와 화살표 ->를 이용해 함수를 선언할 수 있다.
// 람다 방식
(매개변수, ... ) -> { 실행문 ... }
// 예시
() -> "Hello World!";
함수의 인터페이스(Functional Interface, 단 하나의 추상 메서드만을 가지고 있는 인터페이스)의 구현을 간단하게 표현
람다 표현식
자바는 함수형 프로그래밍을 위해 Java8부터 람다식을 지원
(매개변수) -> { 실행 코드 }
람다식 사용하는 이유
불필요한 코드를 줄이고, 가독성을 높이기 위함
Stream API의 매개변수로 전달이 가능
메서드 참조(::)
람다식의 불필요한 매개변수를 제거하여 더 간결하게 표현 가능
(x, y) -> Math.max(x, y)
Math::max; // (x, y) -> Math.max(x, y)
종류
|
람다 표현식
|
메서드 참조
|
정적 메서드 참조
|
(x) -> ClassName.method(x)
|
ClassName::method
|
인스턴스 메서드 참조
|
(x) -> obj.method(x)
|
obj::method
|
매개변수의 메서드 참조
|
(obj, x) -> obj.method(x)
|
ClassName::method
|
생성자 참고
|
(x, y) -> new ClassName(x, y)
|
ClassName::new
|
'JAVA' 카테고리의 다른 글
[Java] 스레드 Thread (0) | 2024.05.04 |
---|---|
[Java] 스트림 Stream (0) | 2024.05.04 |
[Java] Collections framework (0) | 2024.05.04 |
[Java] 인터페이스 interface (0) | 2024.05.04 |
[Java] 추상 클래스 abstract (0) | 2024.05.04 |