반응형

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]

반응형