람다란 무엇인가 - 03. 람다
02 Jul 2018람다 표현식은 파라미터, 화살표, 바디로 이루어진다.
(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight());
------------------- -- ----------------------------------------
파라미터 화살표 바디
자바 8의 유효한 람다 표현식
(String s) -> s.length()
String 형식의 파라미터 하나를 가지며 int를 반환한다. 람다 표현식에는 return이 함축되어 있으므로 return문을 명시적으로 사용하지 않아도 된다.
(Apple a) -> a.getWeight() > 150
Apple 형식의 파라미터 하나를 가지며 boolean을 반환한다.
(int x, int y) -> {
System.out.println("Result:");
System.out.println(x + y);
}
int 형식의 파라미터 두개를 가지며 리턴값이 없다. 표현식은 여러 행도 가능하다.
람다를 어디에 사용할 수 있나?
그럼 람다를 어디에 사용할 수 있을까? 함수형 인터페이스라는 문맥에 람다 표현식을 사용할 수 있다.
람다 표현식으로 함수형 인터페이스의 추상 메서드 구현을 직접 전달할 수 있다.
함수형 인터페이스
하나의 추상 메서드만 있는 인터페이스
예제에서 ApplePredicate가 함수형 인터페이스이다.
@FunctionalInterface
함수형 인터페이스임을 명시한다.
함수형 인터페이스가 아니면 컴파일 에러가 발생한다.
메서드 참조
메서드 참조를 이용하면 기존의 메서드 정의를 재활용해서 람다처럼 전달할 수 있다.
람다와 메서드 참조 예제
// 람다
(Apple apple) -> apple.getWeight()
// 메서드 참조
Apple::getWeight