람다란 무엇인가 - 03. 람다

람다 표현식은 파라미터, 화살표, 바디로 이루어진다.

(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