BinaryOperator는 Java 8에서 도입된 함수형 인터페이스로, 동일한 타입의 두 개의 피연산자에 대해 연산을 수행하고 그 결과를 피연산자와 같은 타입으로 반환하는 역할을 합니다.
쉽게 말해, 같은 타입의 값 두 개를 받아서 같은 타입의 결과 하나를 만들어내는 연산을 정의할 때 사용됩니다. 내부적으로는 BiFunction<T, T, T>를 상속하며, apply() 메서드를 통해 연산을 수행합니다.
BinaryOperator의 주요 메서드
BinaryOperator 인터페이스에서 제공하는 주요 메서드는 다음과 같습니다.
| 메서드 시그니처 | 설명 |
|---|---|
| maxBy(Comparator<? super T> comparator) | 지정된 Comparator를 기준으로 두 요소 중 더 큰 값을 반환하는 BinaryOperator를 반환합니다. |
| minBy(Comparator<? super T> comparator) | 지정된 Comparator를 기준으로 두 요소 중 더 작은 값을 반환하는 BinaryOperator를 반환합니다. |
예제 1 – maxBy() 활용하기
먼저 maxBy() 메서드를 사용하여 두 정수 중 큰 값을 찾는 예제를 살펴보겠습니다.
import java.util.function.BinaryOperator;
public class Demo {
public static void main(String args[]) {
// 두 값을 비교하여 더 큰 값을 반환하는 BinaryOperator 생성
BinaryOperator<Integer> operator = BinaryOperator
.maxBy((x, y) -> (x > y) ? 1 : ((x == y) ? 0 : -1));
System.out.println(operator.apply(120, 5));
}
}
실행 결과
120
위 코드에서는 람다식으로 비교 로직을 직접 정의했지만, 실무에서는 Comparator.comparingInt(Integer::intValue)나 Integer::compare처럼 기존 Comparator를 활용하는 것이 더 간결합니다.
예제 2 – 람다식으로 곱셈 연산 구현하기
다음은 람다식을 사용해 두 수를 곱하는 연산을 구현한 예제입니다.
import java.util.function.BinaryOperator;
public class Demo {
public static void main(String args[]) {
// 두 정수를 곱하는 연산 정의
BinaryOperator<Integer> operator = (x, y) -> x * y;
System.out.println(operator.apply(5, 7));
}
}
실행 결과
35
정리
BinaryOperator 인터페이스는 다음과 같은 경우에 유용하게 활용됩니다.
- 두 숫자의 덧셈, 뺄셈, 곱셈 등 산술 연산
maxBy(),minBy()를 통한 최댓값·최솟값 비교- Stream API의
reduce()연산에서 누적 계산 로직 전달
같은 타입의 두 인자를 받아 같은 타입의 결과를 반환하는 연산이 필요하다면, 별도의 클래스를 작성하지 않고 BinaryOperator와 람다식만으로 깔끔하게 구현할 수 있습니다.