본문 바로가기

JAVA

JAVA 8 - 람다 추가

728x90

3. 함수형 인터페이스 활용하기

 

3.1 java.util.function 패키지의 함수형 인터페이스

 

다음은 함수형 인터페이스들이다.

 

함수형 인터페이스

 Descriptor

 Method명

 Predicate<T>

 T -> boolean

 test()

 Consumer<T>

 T -> void

 accept()

 Supplier<T>

 () -> T

 accept()

 Function<T,R>

 T -> R

 apply()

 UnaryOperator<T>

 T -> T

 identity()

 

1. Supplier 

 

입력 값 없음 -> return value 만 있는 람다 함수.

 

Supplier는 lazy evaluation 으로 연산상의 이득을 볼수 있다.

 

Lazy evaluation 이란 불필요한 연산을 줄이기 위해 연산을 최대한 늦추는 것을 말한다.

 

만약 엄청 오래걸리는 작업이 있다고 생각하자.

 

일반적인 인수 전달을 할경우 무조건 계산을 해야하기 떄문에 그 연산이 나중에 필요하던 말던 무조건 해야했다.

하지만 Supplier 을 사용하면 그 연산을 필요하기 직전까지 늦출수 있는 장점이 있다.

 

https://leoheo.github.io/lazy-evaluation/

 

Java8 Supplier을 활용하여 Lazy Evaluation 사용하기

모던 자바 (자바8) 못다한 이야기 - 05 Supplier, The Master of Lazy Evaluation를 보고 Lazy Evaluation에 대해서 정리를 한번 해본다.

leoheo.github.io

 

2. Consumer 

입력값 하나만 있고 출력 값이 없는 함수 accept 함수를 가지고 있다.

 

람다함수가 주어지면 이 값은 Consumer 인터페이스의 accept 함수의 몸통이 되게 된다. 

Stream의 foreach의 인수가 바로 Consumer이다.

 

3. Predicate 

 

Predicate는 인자 하나를 받고 boolean value를 리턴한다. 

람다함수가 주어지면 이 값은  test 함수의 몸통이 된다.

Stream의 filter 함수의 인수가 바로 Predicate이다.

 

4. Function

Function은 인자 하나를 받고 결과값을 리턴하는 인터페이스다.

람다함수가 주어지면 이값은 apply 함수의 몸통이 된다.

Stream 의 map의 인수가 바로 Function 이다.

'JAVA' 카테고리의 다른 글

Spring Data JPA  (0) 2020.08.30
JDBC, MyBatis  (0) 2020.08.27
JAVA 8 (2) - Optional  (0) 2020.08.15
웹서버 vs WAS  (0) 2020.08.07
StringBuilder vs StringBuffer  (0) 2020.07.02