자바/람다식

java.util.function 패키지

백_곰 2022. 4. 11. 14:58

1. java.util.function 패키지

- 이 패키지에는 일반적으로 자주 쓰이는 형식의 메서드를 함수형 인터페이스로 미리 정의해 놓았다.

 

 

- 아래는 대표적 5가지 함수형 인터페이스이다.

(1) java.lang.Runnable

: 매개변수와 반환값이 없다.

<void run()>

 

(2) Supplier<T>

: 매개변수가 없고, 반환값만 있다.

<T get()>

 

(3) Consumer<T>

: 매개변수만 있고, 반환값은 없다.

<void accept(T t)>

 

(4) Function<T,R>

: 일반적인 함수로 하나의 매개변수를 받아서 결과를 반환한다.

<R apply(T t)>

 

(5) Predicate<T>

: 조건식을 표현하는데 사용된다.

: 매개변수는 하나, 반환타입은 boolean이다.

: 반환타입이 boolean인 것을 제외하면 (4) Function과 동일하다.

<boolean test(T t)>

 

 

- 매개변수가 두 개인 함수형 인터페이스는 Consumer, Predicate, Function 앞에 'Bi'를 붙이면

된다.

 

 

 

1-1. Predicate를 이해하기 위한 예제(1)

: 간단하게 s변수에 문자열이 비어있는지 없는지 boolean을 통해 알아보는 예제이다.

 

 

 

 

 

2. 컬렉션 프레임웍과 함수형 인터페이스

- 컬렉션 프레임웍의 인터페이스에 다수의 디폴트 메서드가 추가되었는데,

그 중의 함수형 인터페이스를 사용한다.

( 자세한 메서드 내용은 804p를 참고한다. )

 

 

 

 

2-1. 컬렉션 프레임웍과 함수형 인터페이스를 이해하기 위한 예제(1)

: 아래의 예제는 이전의 사용했던 컬렉션 프레임웍에서 람다식을 이용한 것을 보여준다.

 

 

 

 

 

3. java.lang.function의 함수형 인터페이스를 이해하기 위한 예제(1)

 

 

 

 

3. java.lang.function의 함수형 인터페이스를 이해하기 위한 예제(2)

: 3번 예제(1)과 달리 기본형 타입을 사용하는 함수형 인터페이스이다.

 

(UnaryOperatorBinaryOperator 함수형 인터페이스는 매개변수의 타입과 반환타입이

모두 일치한다는 점을 제외하고는 Function과 똑같다. )

( 이 둘의 차이점은 매개변수 갯수 차이이다.  전자는 1개 후자는 2개 )

 

( Supplier 부분에서 get()이 아니라 getAsInt()이다. )

( UnaryOperator 부분에서 apply()가 아니라 applyAsInt()이다. )

 

( 위에서 IntUnaryOperator 대신 Function을 넣는다면 에러가 발생한다. )

( 그 이유는 매개변수 a와 반환 값의 타입을 추정할 수 없기 때문이다. )

( 그래서 만약 Function을 넣는다면, 아래와 같이 해야 한다.)

 

Function<Integer, Integer> f = (a) -> 2*a;

//매개변수 타입과 반환 타입은 Integer

또는

IntFunction<Integer> f = (a) -> 2*a;

//매개변수 타입은 int, 반환값은 Integer

 

( 그러나, IntUnaryOperator가 오토박싱과 언박싱의 횟수가 줄어들어 더 성능이 좋다. )