BiConsumer란?
BiConsumer<T, U> 는 자바의 함수형 인터페이스 중 하나로,
두 개의 입력값을 받아 처리(소비)하는 연산을 정의함.
리턴 값은 없고, 부수 효과(side effect) 를 가지는 작업(ex: 출력, 저장 등)을 수행할 때 사용됨.
1. 기본 정의
@FunctionalInterface
public interface BiConsumer<T, U> {
void accept(T t, U u);
}
- T, U: 두 개의 입력 타입
- accept(T t, U u): 두 인자를 받아서 어떤 작업을 수행함 (리턴값 없음)
2. 기본 예시
BiConsumer<String, Integer> printer = (name, age) -> {
System.out.println("이름: " + name + ", 나이: " + age);
};
printer.accept("홍길동", 30);
→ 출력 결과: 이름: 홍길동, 나이: 30
3. 자주 쓰이는 활용 예시
① Map 순회
Map<String, Integer> scores = Map.of("수학", 90, "영어", 85);
scores.forEach((subject, score) -> {
System.out.println(subject + ": " + score);
});
- Map.forEach() 메서드는 BiConsumer<? super K,? super V> 를 받음
- 키-값 쌍을 받아서 처리하는 데 적합함
② 커스텀 연산 수행
BiConsumer<List<String>, String> adder = (list, item) -> list.add(item);
List<String> names = new ArrayList<>();
adder.accept(names, "김철수");
System.out.println(names); // [김철수]
4. BiConsumer의 메서드 결합 – andThen()
BiConsumer 는 andThen() 메서드를 통해 연속적인 처리 연결이 가능함
BiConsumer<String, Integer> print = (name, age) ->
System.out.println("이름: " + name);
BiConsumer<String, Integer> printAge = (name, age) ->
System.out.println("나이: " + age);
BiConsumer<String, Integer> combined = print.andThen(printAge);
combined.accept("김영희", 28);
→ 출력 결과:
이름: 김영희
나이: 28
5. BiConsumer를 쓸 때 적합한 상황
상황 | 설명 |
Map 키-값 쌍 순회 | Map.forEach() 에서 BiConsumer 사용 |
두 개의 값으로 로직 처리 | (객체, 파라미터) 형식의 연산 수행 시 |
부수 효과 중심 작업 | 로그 출력, 리스트 추가, DB 저장 등 |
함수 조합 | andThen() 을 통해 단계별 작업 구성 가능 |
6. BiConsumer vs BiFunction 차이
항목 | BiConsumer | BiFunction |
입력 | 2개 | 2개 |
리턴 | 없음 (void) | 있음 |
용도 | 부수 효과 중심 | 결과 생성 중심 |
예시 | 출력, 저장 | 연산 결과 계산, DTO 생성 등 |
정리
BiConsumer<T, U> 는 두 개의 입력값을 받아 리턴 없이 작업을 수행하는 함수형 인터페이스임.
Map.forEach(), List 조작, 로그 출력 등 부수 효과가 필요한 작업에 자주 사용되며,
함수 연결(andThen)로 연속적인 로직 구성도 가능함.
Java 8 이상에서 람다 표현식과 함께 사용하면 코드가 간결하고 유연해짐.
출처 : ChatGPT
'BE > Java' 카테고리의 다른 글
chronofield (0) | 2025.05.25 |
---|---|
chronounit (0) | 2025.05.24 |
[Java] ArrayDeque (0) | 2025.04.02 |
[Java] 비동기 처리 (try-catch) (0) | 2025.03.28 |
[Java] 체인호출 (0) | 2025.03.24 |