728x90
반응형
함수형 인터페이스
하나의 추상 메서드를 가진 인터페이스만 람다식으로 사용 가능 👉 이러한 인터페이스를 함수형 인터페이스라고 함
익명 함수와 매개 변수만으로 구현되므로 단 하나의 메서드만을 가져야 함(두 개 이상의 메서드인 경우 어떤 메서드의 호출인지 모호해 짐)
하나의 abstract 메서드를 가지는 인터페이스
함수형 인터페이스 지정을 위해 @FunctionalInterface 이 도입됨
@FunctionalInterface
함수형 인터페이스라는 의미, 여러 개의 메서드를 선언하면 에러
@FunctionalInterface
public interface Operator<T> {
public T operator(T op1, T op2);
}
함수형 인터페이스 이해하기
✔️ 람다와 익명 클래스는 다름
익명 클래스는 컴파일 시 서브 클래스도 별도의 파일로 컴파일 되고, 람다는 기존 클래스에 포함됨
람다는 바이트 코드로 변환 시 Java7에서 추가된 InvokeDynamic 명령어를 이용하여 런타임에 코드가 생성
✔️ 함수형 인터페이스를 인자로 받는 메서드에서 람다식을 사용할 수 있음
✔️ 위와 같은 제약사항으로 인해 람다식의 타입 추론이 가능해졌음
함수형 인터페이스가 가지고 있는 추상 메서드가 오직 하나 밖에 없으므로, 이를 이용하여 타입을 추론
람다식의 Parameter 추론 : 추상 메서드의 파라미터 정보
람다식의 Return 타입 추론 : 추상 메서드의 리턴 타입 정보
✔️ Java8에서 java.util.function 패키지로 다양한 함수형 인터페이스를 제공
함수형 인터페이스 | Descriptor | Method명 |
Predicate<T> | T -> boolean | test() |
BiPredicate<T, U> | (T, U) -> boolean | test() |
Consumer<T> | T -> void | accept() |
BiConsumer<T, U> | (T, U) -> void | accept() |
Supplier<T> | () -> T | get() |
Function<T, R> | T -> R | apply() |
BiFunction<T, U, R> | (T, U) -> R | apply() |
UnaryOperator<T> | T -> T | identity() |
BinaryOperator<T> | (T, T) -> T | apply() |
반응형
'프로그래밍 > JAVA' 카테고리의 다른 글
[Java] 스트림(Stream)의 특징 (0) | 2022.03.18 |
---|---|
[Java] 스트림(Stream)이란 ? (0) | 2022.03.16 |
[Java] 람다식의 특징 및 장단점 (0) | 2022.03.14 |
[Java] 람다식이란? (0) | 2022.01.28 |
HashMap 사용 예제 (0) | 2021.12.30 |