Java/함수형 인터페이스

[Java]BiConsumer 인터페이스 사용 방법

DevStory 2022. 8. 23.

BiConsumer 인터페이스

BiConsumer Interface는 Java에서 함수형 프로그래밍을 구현하기 위해 Java 버전 1.8부터 도입된 함수형 인터페이스로 두 개의 매개변수를 전달받아 특정 작업을 수행해야 하는 경우 사용됩니다.

 

인터페이스 이름의 의미는 두 개의 데이터(매개변수)를 소비(사용)하고 아무것도 생성하지 않는다는 의미입니다.

 

따라서, 제네릭 타입인 두 개의 인수가 존재하며, 반환 타입은 존재하지 않습니다.

@FunctionalInterface
public interface BiConsumer<T, U> {
  void accept(T t, U u);

  default BiConsumer<T, U> andThen(BiConsumer<? super T, ? super U> after) {
    Objects.requireNonNull(after);
    return (l, r) -> {
      accept(l, r);
      after.accept(l, r);
    };
  }
}

BiConsumer 인터페이스는 두 개의 제네릭 타입을 사용합니다.

T:  첫 번째 매개변수의 타입입니다.

U: 두 번째 매개변수의 타입입니다.

 

인터페이스 내부에는 추상 메서드 accept()와 디폴트 메서드인 andThen() 메서드가 존재합니다.

 

람다 표현식을 사용하면 BiCounsumer 인터페이스의 추상 메서드를 구현하는 클래스를 정의할 필요가 없으며, BiConsumer 타입의 객체에 할당된 람다 표현식은 accept() 메서드를 구현하기 위해 사용됩니다.

 

[Java]기본 메서드 또는 디폴트 메서드(Default Method)

기본 메서드(Default Method) Java 8에 도입된 기본 메서드는 default 키워드를 사용하여 인터페이스(interface)에서 메서드를 구현하는 것입니다. 기본 메서드 도입 이전에는 인터페이스에 추상 메서드만

developer-talk.tistory.com


BiConsumer 인터페이스의 accept 메서드

accept() 메서드는 제네릭 타입인 두 개의 매개변수를 전달받아 특정 작업을 수행합니다.

void accept(T t, U u);

다음 예제는 accept() 메서드 사용 방법입니다.

 

먼저, 람다 표현식을 사용하여 BiConsumer 인터페이스를 구현합니다. 람다 표현식은 Integer 타입인 두 개의 매개변수의 값을 곱한 결과를 콘솔에 출력합니다. 

 

accept() 메서드에 Integer 타입인 두 개의 숫자 값을 전달하면, 람다 표현식으로 작성한 로직이 실행됩니다.

public static void main(String args[]) {
  BiConsumer<Integer, Integer> biConsumer =
          (num1, num2) -> 
                  System.out.println(num1 + " * " + num2 + " = " + (num1 * num2));

  biConsumer.accept(10, 20);
  biConsumer.accept(20, 50);
  biConsumer.accept(40, 100);
}

[실행 결과]

10 * 20 = 200
20 * 50 = 1000
40 * 100 = 4000

BiConsumer 인터페이스의 andThen 메서드

BiConsumer 인터페이스에는 디폴트 메서드인 andThen() 메서드가 존재합니다.

default BiConsumer<T, U> andThen(BiConsumer<? super T, ? super U> after) {
  Objects.requireNonNull(after);
  return (l, r) -> {
    accept(l, r);
    after.accept(l, r);
  };
}

andThen() 메서드의 매개변수는 BiConsumer 타입이며, BicConsumer 타입의 객체를 전달받거나 두 개의 매개변수와 반환 타입이 없는 람다 표현식을 전달받습니다.

 

andThen() 메서드는 accept() 메서드 실행 후 매개변수로 전달받은 BiConsumer 객체의 accept() 메서드를 실행합니다.

 

다음 예제는 Integer 타입인 두 매개변수의 값을 더한 결과를 출력하는 biConsumerAdd, 뺄셈 결과를 출력하는 biConsumerMinus, 곱셈 결과를 보여주는 biConsumerMultiple이 존재합니다.

 

덧셈 → 뺄셈 → 곱셈 순서로 BiConsumer가 실행됩니다.

public static void main(String args[]) {
  BiConsumer<Integer, Integer> biConsumerAdd =
          (num1, num2) -> 
                  System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));

  BiConsumer<Integer, Integer> biConsumerMinus =
          (num1, num2) -> 
                  System.out.println(num1 + " - " + num2 + " = " + (num1 - num2));

  BiConsumer<Integer, Integer> biConsumerMultiple =
          (num1, num2) -> 
                  System.out.println(num1 + " * " + num2 + " = " + (num1 * num2));

  biConsumerAdd.andThen(biConsumerMinus.andThen(biConsumerMultiple)).accept(100, 50);
}

[실행 결과]

100 + 50 = 150
100 - 50 = 50
100 * 50 = 5000
반응형

댓글