빈번하게 사용하는 functional interface (람다식으로 구현할 수 있는 함수적 인터페이스) 제공
이 함수적 인터페이스(추상메서드 하나만 가지는 인터페이스)들은 매개타입으로 많이 사용한다.
함수적 인터페이스는 크게 Consumer, Supplier, Function, Operator, Predicate로 구분, 구분 기준은 추상메서드의 매개값과 리턴값 유무
Consumer : 매개값만 받고 리턴은 X
Supplier : 매개값은 안받고 리턴값만 줌
Function : 매개값도 받고 리턴값도 줌, 주로 매개값을 리턴값으로 매핑(타입 변환)하는 기능을 함
// Mapping?? 2권 뒤쪽에서 공부할 내용
Operator : 매개값 o 리턴값 o, 주로 매개값 연산하여 연산결과 리턴
Predicate : 매개값 o 리턴값 o, 리턴값이 boolean, 매개값 조사해서 true, false 리턴
andThen()과 compose() 디폴트 메서드 (Consumer / Function / Operator)
디폴트 메서드와 정적 메소드는 추상메서드가 아니기때문에 함수적 인터페이스에 선언되어도 함수적 인터페이스의 성질을 잃지않는다.
java.util.function 패키지의 함수적 인터페이스는 모두 하나 이상의 디폴트 및 정적메서드를 가지고 있다.
먼저 실행한 함수적 인터페이스의 결과(리턴값)를 다음 함수적 인터페이스의 매개값으로 넘겨준다.
인터페이스<>타입 A = ( ) -> {...}
인터페이스<>타입 B = ( ) -> {...}
인터페이스<>타입 AB = A.andThen( B )
처리 방향------->
B의 리턴타입 변수 = AB.메서드( 매개값 : A의 매개값 )
A부터 실행되므로 AB의 매개값 자리에는 A 실행 시에 필요한 매개값만 주면 최종적으로 B의 리턴값을 출력. (p.706 예제)
인터페이스<>타입 AB = A.compose( B )
<-------- 처리 방향
A의 리턴타입 변수 = AB.메서드( 매개값 : B의 매개값 )
B부터 실행되므로 AB의 매개값 자리에는 B 실행 시에 필요한 매개값만 주면 최종적으로 A의 리턴값을 출력 (p.706 예제)
Comsumer로 분류되는 인터페이스는 값을 리턴하지 않기때문에 compose() 디폴트 메서드가 없고,
Comsumer로 분류되되는 인터페이스의 andThen() 디폴트 메서드는 함수적 인터페이스의 호출 순서만 정한다.
and(), or(), negate() 디폴트 메서드 / isEqual() 정적메서드 ( Predicate )
and() |
or() |
negate() |
&& |
|| |
! |
isEqual() 메서드에 대한 교재 설명 내용 :
Predicate . isEqual ( obj1 ) 메서드는 test( obj2 ) 메서드의 매개값을 가져와 equal( obj1, obj2 )의 리턴값을 얻어 새로운 Predicate<T> 생성
(비교 대상 모두 null이면 true를 반환)
isEqual()
1 2 3 4 | static <T> Predicate<T> isEqual(Object targetRef) { return (null == targetRef) ? Objects::isNull : object -> targetRef.equals(object); | cs |
minBy(), maxBy() 정적 메서드 (BinaryOperator<T>)
(19일 다시 정리)
'Java > API' 카테고리의 다른 글
java.util.Optional<T> (0) | 2019.04.21 |
---|---|
java.util.stream (0) | 2019.04.21 |
java.util.Arrays (0) | 2019.04.20 |
java.util.concurrent (0) | 2019.04.19 |