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
복사했습니다!