SMALL
람다 표현식을 사용하기 해서는 함수형 인터페이스여야 한다
그렇다면, 함수형 인터페이스가 무엇이고 , 어떠한 것들이 있는지 알아보도록 하자
함수형 인터페이스
1개의 추상 메소드를 갖고 있는 인터페이스
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
@FunctionalInterface 어노테이션을 통해서 함수형 인터페이스라는 걸 명시적으로 드러낼 수 있다.
또한, IDE에서 해당 어노테이션이 있을 시, 메소드를 추가하려 하는 경우 컴파일 에러를 발생시켜 준다.
java.util.function 패키지를 보면 다양한 용도의 표준 함수형 인터페이스가 담겨있다.
람다식을 사용할 때마다 함수형 인터페이스를 매번 정의하기에는 불편하기 때문에 자바에서 라이브러리로 제공하는 것들이 있다.
자바에서 기본적으로 제공하는 함수형 인터페이스는 다음과 같은 것들이 있다
위에서 설명한 인터페이스 이외에도 다양한 함수형 인터페이스를 자바에서 기본으로 제공한다.
기본 제공하는 인터페이스의 인자 및 리턴타입은 제네릭이기 때문에 primitive 타입을 사용하고 싶은 경우에는 ReferenceType의 Integer, Double 등등의 타입을 사용하여야 한다.
이러한 부분에서 불필요한 autoBoxing을 제거하기 위해서 기본 특화형 인터페이스를 제공한다.
- IntConsumer, LongConsumer, DoubleConsumer...
- IntFuction <R> IntToDoubleFunction, LongFunction <R>, ToDoubleFunction <T>..
이외에도 Bi와 같은 Prefix가 붙은 다양한 인터페이스가 존재하는데 각각의 PreFix의 의미를 살펴보면
- Bi .. : 인자로 받는 타입이 2개
- Unary .. : 같은 타입 인자 1개, 같은 반환형
- Binary .. : 같은 타입 인자 2개, 같은 반환형
와 같이 유추해볼 수 있다.
LIST
'Java' 카테고리의 다른 글
[JAVA] java.nio.file.Files 관련 메서드 (Path) (0) | 2022.03.17 |
---|---|
[JAVA] Java Stream (스트림) API (0) | 2020.12.31 |
[JAVA] Java8 Lambda Expressions ( 람다식, 람다 표현식 ) (0) | 2020.12.23 |
[JAVA] Java GC ( Garbage Collection ) (0) | 2020.11.26 |
[JAVA] JVM Execution Engine (실행엔진) (0) | 2020.11.25 |