java.util.function 패키지
java.util.function 패키지 (1/3)
- 자주 사용되는 다양한 함수형 인터페이스를 제공
java.util.function 패키지는, 자주 사용되는 다양한 함수형 인터페이스를 제공한다.
Runnalbe은 우리가 쓰레드에서 배웠던 것인데, 매개변수도 없고, 반환값도 없는 경우에 Runnalbe인터페이스를 사용하면 된다.
공급자 Supplier<T>라는 함수형 인터페이스는 매개변수는 없고, 반환값만 있다.
소비자 Consumer<T>는 Supplier와 반대로 매개변수만 있고, 반환값이 없다.
함수 Function<T, R>은 일반적인 함수, 하나의 매개변수를 받아서 결과를 반환한다.
조건식 Predicate<T>는 함수와 똑같은데 어떤차이가 있냐면, 입력받은 결과를 true아니면 false로 반환한다.
조건식을 표현하는데 사용되고, 매개변수는 하나이고, 반환타입은 boolean이다.
Predicate을 사용하는 방법이다.
람다식의 반환타입이 boolearn이어야 한다.
위의 코드에서는 람다식이 조건식이므로 참 또는 거짓이어야 한다.
문자열을 받아서 문자열의 길이가 0인지 확인하는 것이다. 0이면 참, 아니면 거짓.
test는 람다식에 붙여진 이름이다.
그래서 이 람다식을 호출하려면 규칙으로 붙여진 test라는 이름으로 호출해야한다.
Predicate 형으로 생성한 isEmptyStr로 이 조건에 맞는지 test해서 boolean으로 반환해준다.
java.util.function 패키지 - Quiz
Q. 아래의 빈 칸에 알맞은 함수형 인터페이스(java.util.function 패키지)를 적으시오.
첫번째 람다식은 매개변수가 없고, 반환값은 있다. 즉, Supplier<Integer>이다.
두번째 람다식은 매개변수가 있고, 반환값은 없다. 즉, Consummer<Integer>이다.
세번째 람다식은 조건식이다. 즉, Predicate<Integer> 이다. 원래는 Function<T, R>처럼 Predicate<Intger, Boolean>이라고 써야 하지만, 반환타입이 항상 Boolean이기 때문에 Boolean은 쓰지 않는다.
네번째 람다식은 i를 주면 i/10*10 결과를 반환한다. 입력값도 있고 출력값도 있다. 즉, Function<Integer, Integer>이다.
java.util.funtion 패키지 (2/3)
- 매개변수가 2개인 함수형 인터페이스
매개변수가 2개인 것은 앞에 Bi가 붙는다.
BiConsumer는 두개의 매개변수만 있고, 반환값이 없다.
BiPredicate는 조건식을 표현하는데 사용되며, 매개변수는 둘, 반환값은 boolean이다.
BiFunction은 두 개의 매개변수를 받아서 하나의 결과를 반환한다.
우리가 매개변수를 3개로 갖는 함수형 인터페이스가 필요하면, 우리가 직접 위와같이 만들면된다.
위의 코드에서는 인터페이스의 이름을 TriFunction이라고 주었다. 매개변수 3개 입력받을 수 있도록 만들었다.
이런식으로 직접 정의하면 된다.
매개변수가 1개나 2개일때는 웬만하면 기존에 존재하는 것을 사용하고,
3개이상일떄는 직접 정의해서 사용하면 된다.
java.util.function 패키지 (3/3)
- 매개변수의 타입과 반환타입이 일치하는 함수형 인터페이스
매개변수의 타입과 반환타입이 일치하는 함수형 인터페이스가 있다. 어떤 것이 있는지 살펴보자.
UnaryOperator와 BinaryOperator가 있다. (Unary 단항, Binary 이항)
이 두 인터페이스는 각가 매개변수 타입과 반환타입이 일치한다.
보통 그냥 Function은 Function<T, R> 이다. 즉 T를 넣으면 R이 나온다.
그래서 타입을 2개를 써줘야 하는데,
이 UnaryOperator는 T를 넣으면 T가 나오므로 타입을 하나면 써주면 된다.
UnaryOperator를 보면, Fucntion<T, T> 인터페이스를 상속받아서 만든 인터페이스다.
그 안에 identity라는 메서드가 있는데, 이것은 항등 함수를 구현해 놓은 것이다.(t를 넣으면 t를 반환하는
BinaryOperator도 입력이 2개라는 것을 제외하면 UnaryOperator와 똑같다.
[Ex14_2]
'JAVA' 카테고리의 다른 글
메서드 참조, 생성자의 메서드 참조 (0) | 2022.08.05 |
---|---|
Predicate의 결합, 컬렉션 프레임웍과 함수형 인터페이스 (0) | 2022.08.04 |
함수형 인터페이스 (0) | 2022.07.30 |
람다식, 람다식 작성하기 (0) | 2022.07.28 |
wait()과 notify() (0) | 2022.07.27 |
댓글
이 글 공유하기
다른 글
-
메서드 참조, 생성자의 메서드 참조
메서드 참조, 생성자의 메서드 참조
2022.08.05 -
Predicate의 결합, 컬렉션 프레임웍과 함수형 인터페이스
Predicate의 결합, 컬렉션 프레임웍과 함수형 인터페이스
2022.08.04 -
함수형 인터페이스
함수형 인터페이스
2022.07.30 -
람다식, 람다식 작성하기
람다식, 람다식 작성하기
2022.07.28