ㅇ.ㅇ
[Java] BiFunction과 ToIntBiFunction의 차이 본문
최근에 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을 선택해야 할 때
반환값이 무조건 정수여야 하고, 숫자 연산이 핵심인 경우.
- 예: 두 숫자를 더하거나 곱할 때.
- 예: 두 입력값의 길이나 크기를 비교할 때.
반응형
'Today I Learned' 카테고리의 다른 글
[Server] 가상화 기술 (0) | 2024.12.08 |
---|---|
[Server] 엔터프라이즈 환경에서의 서버 운영 방식 (0) | 2024.12.08 |
[Query] JSON 데이터 처리 방식 : PostgreSQL / Oracle (0) | 2024.11.21 |
[IDE] Intellij 와일드카드 import 방지 (1) | 2024.10.20 |
[JUnit] 테스트 관련 어노테이션 정리 #1 (1) | 2024.10.13 |