Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
관리 메뉴

ㅇ.ㅇ

[Java] BiFunction과 ToIntBiFunction의 차이 본문

Today I Learned

[Java] BiFunction과 ToIntBiFunction의 차이

yun_ 2024. 11. 24. 23:43

 

최근에 BiFunction을 사용해 볼 기회가 있었는데 관련 내용을 좀 더 찾아보다가 ToIntBiFunction과 함께 비교해보면 좋을 것 같아 이렇게 정리를 해보려고 한다. 

우선 두 인터페이스는 둘 다 Java의 함수형 인터페이스로서, 두 개의 입력 값을 받아 하나의 출력 값을 반환하는 기능을 한다. 가장 큰 차이점은 반환값의 타입이 다르다는 점이다.


1. BiFunction

다양한 결과를 반환할 수 있는 다목적 함수형 인터페이스

  • BiFunction<T, U, R>는 두 개의 입력 값(T, U)을 받아 원하는 타입(R)의 결과를 반환한다.
  • R 타입은 제한이 없기 때문에, 문자열, 숫자, 객체 등 무엇이든 반환할 수 있다.
// 메서드 시그니처
R apply(T t, U u);

// 예시: 두 숫자를 문자열로 합치는 작업

BiFunction<Integer, Integer, String> concatNumbers = (a, b) -> a + "와 " + b + "를 더했습니다.";
System.out.println(concatNumbers.apply(5, 7)); 
// 출력: 5와 7를 더했습니다.
  • 입력: 두 개의 값 (T, U)
  • 출력: 무엇이든 가능 (R)

2. ToIntBiFunction

결과는 무조건 정수(Int)로 나오는 도구

  • ToIntBiFunction<T, U>는 두 개의 입력 값(T, U)을 받아 **정수 값(int)**을 반환한다.
  • 결과 타입이 무조건 int로 제한됩니다. 따라서 숫자 관련 연산에 적합하다.
// 메서드 시그니처
int applyAsInt(T t, U u);

// 예시 : 두 문자열의 길이를 더하는 함수

ToIntBiFunction<String, String> sumLengths = (s1, s2) -> s1.length() + s2.length();
int result = sumLengths.applyAsInt("고양이", "강아지");
System.out.println(result); 
// 출력 : 6 (고양이(3) + 강아지(3))
 
  • 입력: 두 개의 값 (T, U)
  • 출력: 항상 int

3. 비교해보기

구분 BiFunction ToIntBiFunction
반환 타입 유연 (문자열, 객체, 컬렉션 등 모든 타입 가능) 항상 int
박싱(Boxing) 발생 (기본형을 객체로 변환해야 할 수 있음) 발생하지 않음 (기본형 int 그대로 반환)
성능 박싱/언박싱으로 인해 조금 느릴 수 있음 박싱/언박싱이 없으므로 더 빠름
주요 사용 사례 다양한 타입의 결과값을 반환해야 하는 경우 숫자 연산, 길이 계산 등 정수 결과가 필요한 경우
가독성 반환 타입이 명확하지 않을 수 있음 항상 정수를 반환하므로 명확함 

4. 선택 기준 ~

1) BiFunction을 선택해야 할 때

반환값이 반드시 문자열, 객체, 리스트, Map 등 다양한 타입일 때.

  • 예: 두 개의 객체, 데이터를 조합해 새로운 객체를 생성.
  • 예: 두 값을 합쳐 문자열을 생성.

2) ToIntBiFunction을 선택해야 할 때

반환값이 무조건 정수여야 하고, 숫자 연산이 핵심인 경우.

  • 예: 두 숫자를 더하거나 곱할 때.
  • 예: 두 입력값의 길이나 크기를 비교할 때.

 

 

반응형