정의되어 있는 함수형 인터페이스
[복습]
<? extends Class> 의 목적:
Class 형 변수에 get하는건 상관이 없으나 Class형 변수를 set하는 것은 불가능
(? 에 들어가는 것은 Class의 자식 클래스들)
<? super Class> 의 목적:
Class 형 변수를 set하는 것은 상관없으나 Class형 레퍼런스 변수가 get한 인스턴스를 참조하는 것은 불가능
정리:
? extends Class 는 Class형으로 get은 가능, set은 불가
? super Class 는 Class 형으로 set은 가능, get은 불가
미리 정의되어 있는 함수형 인터페이스
default boolean removeIf (Predicate<? super E> filter)
이는 Collection<E>인터페이스에 정의되어 있는 디폴트 메소드 이다.
Predicate 인터페이스의 추상 메소드는 다음과 같이 정의되어 있다.
@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
이것만 보고는 사실 이 Predicate 인터페이스를 어떻게 사용하는지 알기 힘들다
그래서 자바에서는 Predicate 와 같은 인터페이스가 어떤 인터페이스인지를 미리 정의해놓았다.
(이는 약속이고 미리 알아두면 용이하게 참조하여 사용할 수 있다.)
대표적인 미리 정의되어 있는 함수형 인터페이스들
Prredicate<T>: 추상 메소드 boolean test(T t) 가 정의되어 있으며 전달인자를 근거로 참 또는 거짓을 반환한다.
Supplier<T> : 추상 메소드 T get()이 정의되어 있으며 메소드 호출시 무엇인가를 제공한다.
Consumer<T>: 추상 메소드 void accept(T t) 가 정의되어 있으며 인자를 받아들이기만 한다.
Function<T, R>: 추상 메소드 R apply(T t)가 정의되어 있으며 입출력 출력이 있다. (수학적으로는 함수)
이들은 java.util.function 패키지로 묶여 있다.
이런게 있다는 걸 알아만두고 이후 필요할 때 직접 이용해보도록 하자.