언어/Java

정의되어 있는 함수형 인터페이스

honeyricecake 2023. 2. 7. 20:32

[복습]

 

<? 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 패키지로 묶여 있다.

 

이런게 있다는 걸 알아만두고 이후 필요할 때 직접 이용해보도록 하자.