Consumer

sungs·2025년 6월 30일

자바

목록 보기
25/95

✅ 1. Consumer란?

Consumer<T>는 제네릭 인터페이스로, 하나의 인자를 받아 어떤 동작을 수행하지만 결과를 반환하지 않는 함수형 인터페이스다.

@FunctionalInterface
public interface Consumer<T> {
    void accept(T t);
}
  • T: 입력 파라미터의 타입

  • accept(T t): 전달받은 값을 소비(consume)하는 메서드

✅ 2. 언제 사용하나요?

  • 컬렉션 요소를 출력하거나 로깅할 때

  • 입력값에 대해 부수 효과(side effect)가 필요한 경우 (예: 저장, 출력, 변경 등)

  • Stream API의 forEach, peek와 함께 자주 사용

✅ 3. Consumer 사용 예제

🔹 기본 예제

import java.util.function.Consumer;

public class ConsumerExample {
    public static void main(String[] args) {
        Consumer<String> printUpper = s -> System.out.println(s.toUpperCase());

        printUpper.accept("hello");  // 출력: HELLO
    }
}

🔹 List와 함께 사용하기

import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;

public class ListConsumerExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Java", "Python", "C++");

        Consumer<String> printName = name -> System.out.println("언어: " + name);

        names.forEach(printName);
    }
}

✅ 4. Consumer 조합: andThen

여러 개의 Consumer 동작을 순차적으로 연결할 수도 있다.

Consumer<String> print1 = s -> System.out.println("1차 출력: " + s);
Consumer<String> print2 = s -> System.out.println("2차 출력: " + s);

Consumer<String> combined = print1.andThen(print2);
combined.accept("Java");
// 출력:
// 1차 출력: Java
// 2차 출력: Java

❗ andThen은 첫 번째 Consumer 실행 후 두 번째 Consumer를 실행한다.
순서가 중요하며, 둘 다 같은 인자를 받는다.\

✅ 5. Consumer vs Function

구분ConsumerFunction
반환값없음 (void)있음 (R)
메서드accept(T t)apply(T t)
사용 목적동작 수행 (출력 등)결과 생성 및 반환

✅ 6. 마무리

Consumer<T>는 반환값이 없는 함수형 인터페이스로, 간단한 동작(출력, 저장 등)에 매우 유용하다. 특히 Stream API의 forEach()와 함께 사용하면, 가독성 좋고 선언적인 코드를 작성할 수 있다.

함수형 프로그래밍에 익숙해질수록, Consumer는 자연스럽게 자주 사용하는 도구가 된다.

profile
앱 개발 공부 중

0개의 댓글