/////
Search
Duplicate
2️⃣

어디에, 어떻게 람다를 사용할까?

: 그래서 정확하게 어느 부분에서 람다를 사용할 수 있을까? → 함수형 인터페이스라는 문맥에서 람다 표현식을 사용할 수 있다.

1. 함수형 인터페이스

: 앞서 우리는 Predicate<T> 인터페이스에 동적 파라미터를 전달함으로써 그 구현을 런타임상에서 제어할 수 있었다.
: 그 Predicate<T>가 함수형 인터페이스다. Predicate<T>는 오직 하나의 추상 메서드만 지정하기 때문이다.
public interface Predicate<T> { boolean test (T t); }
Java
복사
: 간단하게 말해서 함수형 인터페이스는 정확히 하나의 추상 메서드를 지정하는 인터페이스다. 자바 API의 함수형 인터페이스 예로는 Comparator, Runnable 등이 있다.
: 함수형 인터페이스로 뭘 할 수 있을까? 람다 표현식으로 함수형 인터페이스의 추상 메서드의 구현을 전달할 수 있으므로 전체 표현식을 함수형 인터페이스의 인스턴스로 취급할 수 있다.

2. 함수 디스크립터

: 함수형 인터페이스의 추상 메서드 시그니처는 람다 표현식의 시그니처를 가리킨다. 람다 표현식의 시그니처를 서술하는 메서드를 함수 디스크립터라고 부른다.
: 예를 들어 Runnable 인터페이스의 유일한 추상 메서드 run은 인수와 반환 값이 없으므로 Runnable 인터페이스는 인수와 반환값이 없는 시그니처로 생각할 수 있다.
: 그렇다면 이런 람다 표현식의 형식을 인수로 받는 함수는 어떻게 검사할까?, 이는 3.5절에서 컴파일러가 람다 표현식의 유효성을 어떻게 확인하는지 설명한다.
: 람다 표현식은 변수에 할당하거나 함수형 인터페이스를 인수로 받는 메서드로 전달할 수 있으며 함수형 인터페이스의 추상 메서드와 같은 시그니처를 갖는다는 사실을 기억하는 것으로 충분하다.
⇒ 그렇다면 왜 함수형 인터페이스를 인수로 받는 메서드에만 람다 표현식을 사용할 수 있을까?
: 언어설계자들은 함수 형식을 추가하는 방법도 고려했으나 언어를 더 복잡하게 만드는 방법이었고 대부분의 자바 프로그래머가 하나의 추상 메서드를 갖는 인터페이스에 익숙하다는 점을 토대로 결정하였다.