백엔드/자바

람다와 스트림 - java.util.function - part2

ksge7 2021. 8. 25. 14:44
 

람다와 스트림 - java.util.function - part1

이전 람다 파트에선 람다란 무엇인지, 람다를 사용하기 위한 방법, 함수형 인터페이스 등에 대해서 배웠다. 다시 한번 간단하게 복습하면 다음과 같다. - 람다식은 익명 객체를 간략하게 만든 표

sgcomputer.tistory.com

 

이전 파트에선 함수형 인터페이스를 쉽게 사용할 수 있게 만든 패키지 java.util.function에 대해 알아봤다.

 

이번 파트에서는 추가적으로 유용하게 쓸 수 있는 함수형 인터페이스에 대해서 알아보자.

 

매개변수가 두 개인 함수형 인터페이스


함수형 인터페이스


메서드


설명


BiConsumer < T, U >

void accept ( T t, U u )
두 개의 매개 변수만 있고, 반환값이 없음


BiPredicate < T, U >

boolean test ( T t, U u )
조건식을 표현하는데 사용됨.

매개 변수는 둘, 반환값은 boolean.


BiFunction < T, U, R >

R apply( T t, U u )
두 개의 매개변수를 받아서 하나의 결과 반환

 

위의 인터페이스들은 이전 파트와 달리 두 개의 매개 변수를 받을 수 있는 인터페이스들이다.

 

근데 자세히 보면 이름이 낯익다.

 

기존의 한 개의 매개 변수만 받는 인터페이스들에 "Bi"라는 접두사만 붙여준 것이기 때문이다.

 

즉 파트 1에서 익혔던 인터페이스들과 기능은 같지만, 매개 변수만 두 개인 것이다.

 

함수형 인터페이스 - BiConsumer<T, U>

 

BiConsumer의 사용법과 성격이 Consumer와 동일하다.

 

매개 변수는 있지만, 반환값이 없는 인터페이스로,

 

다만 차이라면 매개변수에 두 개가 들어가기 때문에 지네릭스로 매개변수 타입을 두개 적어줘야 한다.

 

예시에서는 Integer와 String이 서로 짝지어서 사용되었지만, Integer와 String 등 다양한 조합이 가능하다.

 

당연하지만 타입이 다를 경우 람다식 안에서 이에 대한 처리를 해줘야 한다.

 

함수형인터페이스 - BiPredicate<T, U>

 

BiPredicate의 사용법과 성격은 Predicate와 동일하다. 다만 매개 변수가 두개라는 점이 다를 뿐이다.

 

당연할 수도 있지만 이때 알아두면 좋은 점은 두 가지다.

 

하나는 bp1처럼 매개 변수가 두 개여도 그 중에서 하나만 사용해서 조건을 따져도 상관 없다는 점.

 

다른 하나는 bp2처럼 연산자를 사용하여 두 개의 조건을 동시에 판단이 가능하다는 점이다.

 

함수형 인터페이스 - BiFunction< T, U, R >

 

BiFunction은 기존 Function에 매개변수가 2개로 변한 인터페이스다.

 

당연히 매개변수가 2개라 지네릭스로 매개변수 2개의 타입 + 반환 타입 1개 총 3개의 타입을 써야한다.

 

다른 Bi 인터페이스처럼 매개변수 타입 두개를 통일할 필요는 없다.

 

하지만 위 코드처럼 타입이 다르면 람다식으로 처리를 해야한다.

 

매개변수와 반환 타입이 동일한 인터페이스

함수형 인터페이스 메서드 설명

UnaryOperator<T>


T apply( T t )


Function의 자손. Function과 달리

매개변수와 결과의 타입이 같다.


BinaryOperator<T>


T apply( T t, T t )


BiFunction의 자손. BiFunction과

달리 매개변수와 결과의 타입이 같다.

 

함수형 인터페이스 - UnaryOperator <T>

매개 변수와 반환 값의 타입이 같을 때 사용한다.

 

Function의 자손으로서 매개변수 하나만 있어도 사용이 가능하다.

 

함수형 인터페이스 - BinaryOperator <T>

매개 변수와 반환 값의 타입이 같을 때 사용한다.

 

UnaryOperator와 달리 매개 변수는 두 개가 필요하다.