Java/함수형 인터페이스

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

DevStory 2022. 8. 24.

Consumer 인터페이스

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

 

인터페이스 이름이 소비자(Consumer)인 이유는 데이터(매개변수)를 소비(사용)하고 아무것도 생성(반환)하지 않기 때문입니다.

 

따라서, 매개변수는 존재하지만 반환 타입은 존재하지 않습니다.

@FunctionalInterface
public interface Consumer<T> {
  void accept(T t);

  default Consumer<T> andThen(Consumer<? super T> after) {
    Objects.requireNonNull(after);
    return (T t) -> { accept(t); after.accept(t); };
  }
}

Consumer 인터페이스는 한 개의 제네릭 타입을 매개변수로 사용합니다.

 

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


Consumer 인터페이스의 accept 메서드

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

void accept(T t);

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

 

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

 

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

public static void main(String args[]) {
  Consumer<Integer> consumer =
          (num) -> System.out.println(num + " * 10 = " + (num * 10));

  consumer.accept(100);
  consumer.accept(200);
  consumer.accept(400);
}

[실행 결과]

100 * 10 = 1000
200 * 10 = 2000
400 * 10 = 4000

Consumer 인터페이스의 andThen 메서드

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

default Consumer<T> andThen(Consumer<? super T> after) {
  Objects.requireNonNull(after);
  return (T t) -> { accept(t); after.accept(t); };
}

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

 

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

 

다음 예제는 Integer 타입인 매개변수의 값에 100을 더한 결과를 출력하는 consumerAdd, 100을 뺄셈한 결과를 출력하는 ConsumerMinus, 100을 곱한 결과를 출력하는 consumerMultiple이 존재합니다.

 

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

public static void main(String args[]) {
  Consumer<Integer> consumerAdd =
          (num) -> System.out.println(num + " + 100 = " + (num + 100));

  Consumer<Integer> consumerMinus =
          (num) -> System.out.println(num + " - 100 = " + (num - 100));

  Consumer<Integer> consumerMultiple =
          (num) -> System.out.println(num + " * 100 = " + (num * 100));

  consumerAdd.andThen(consumerMinus.andThen(consumerMultiple)).accept(50);
}

[실행 결과]

50 + 100 = 150
50 - 100 = -50
50 * 100 = 5000

참고

아래 포스팅은 제네릭 타입인 두 개의 매개변수를 가지는 BiConsumer 인터페이스에 대한 내용입니다.

 

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

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

developer-talk.tistory.com

반응형

댓글