처음 자바 코드를 보고 화살표는 뭔가 했었다. 스프링 프로젝트를 하며, 교재를 보면서도, 따라만 쳤기에 "자바의 정석"을 보고 일부분만 정리했다.
람다식은 메소드를 하나의 '식'으로 표현한 것이다.
메소드를 람다식으로 표현하면 이름과 반환값이 없어지므로 익명함수
라고도 한다.
라다식은 메소드의 매개변수로 전달되어지는 것과 메소드의 결과로 반환될 수도 있다.
변수처럼 쓸 수 있는 것이다.
반환타입 메소드이름(매개변수 선언) {
문장들
}
람다식은 이름과 반환타입을 제거하고 선언부와 몸통{} 사이에 ->
를 추가한다.
반환타입 메소드이름 (매개변수 선언) -> {
}
(매개변수 선언) -> {
}
예시로
int max(int a, int b) {
return a > b ? a : b;
}
위 코드에서 아래처럼 바꿀 수 있다.
(int a, int b) -> { a > b ? a : b} //식으로 반환시 ; 붙이지 않는다.
람다식이 하나의 메소드만 호출하는 경우에는 '메소드 참조'를 통해 간략히 할 수 있다.
//f의 타입만 봐도 두 개의 String 매개변수를 받는 다는 것을 알 수 있다.
function<String, String, Boolean> f = (s1, s2) -> s1.equals(s2);
//추론 가능 매개변수 제거
function<String, String, Boolean> f = String::equals;
Supplier<MyClass> s = () -> new MyClass(); // 람다식
Supplier<MyClass> s = MyClass::new; // 메소드 참조
매개변수가 있는 생성자라면 매개변수의 개수에 따라 알맞은 함수형 인터페이스를 사용하면 된다.
Function<Integer, MyClass> f = (i) -> new MyClass(i); // 람다식
Function<Integer, MyClass> f2 = MyClass::new // 메소드 참조