본문 바로가기

Programming/JAVA

람다식(4) - 표준 API의 함수적 인터페이스 2 : Consumer Functional Interface

java logo image

 

 

앞선 아티클에서 표준 API로 제공되는 함수적 인터페이스들의 종류에 대해서 간단히 살펴보았습니다. 

 

 

람다식(4) - 표준 API의 함수적 인터페이스 1

앞서서 함수적 인터페이스 - 즉, 단 한 개의 추상 메서드를 가지는 인터페이스를 통해 람다식을 작성하는 방법을 살펴보았습니다. 이제, 자바에서 제공하고 있는 표준 API 중에서 한 개의 추상 메

nozeroslope.tistory.com

 

이제 여기서 리스팅 된 여러 가지 종류의 인터페이스들을 종류별로 하나씩 살펴보겠습니다. 우선, Consumer계열의 인터페이스 입니다. 

 

 

 


 

 

Consumer 함수적 인터페이스의 특징은 [파라미터는 있지만 리턴 값은 없는] accept( ) 추상 메서드를 가지고 있다는 점입니다. Consumer라는 이름처럼, 추상 메서드 accept( )는 단지 파라미터 값을 소비하기만 합니다(사용만 하고, 리턴이 없는 void 타입이라는 의미)

 

Consumer 함수적 인터페이스는, 파라미터의 타입과 개수에 따라서 XXXConsumer 형태로 베리에이션이 존재합니다. 공통적으로 파라미터를 받아 void 타입으로 소비한다는 것은 변함이 없습니다. 

 

 

인터페이스 추상 메서드 설명
Consumer<T> void accept(T t) 객체 T를 받아서 소비한다
BiConsumer<T, U> void accept(T t, U u) 객체 T, U를 받아서 소비한다
DoubleConsumer void accept(double value) double 값을 받아서 소비한다
IntConsumer void accept(int value) int 값을 받아 소비한다
LongConsumer void accept(long value) long 값을 받아 소비한다
ObjDoubleConsumer<T> void accept(T t, double value) 객체 T와 double 값을 받아 소비한다
ObjIntConsumer<T> void accept(T t, int value) 객체 T와 int 값을 받아 소비한다
ObjLongConsumer<T> void accept(T t, long value) 객체 T와 long 값을 받아 소비한다

 

 

위의 예시에서 사용된 인터페이스 몇 가지를 살펴보겠습니다. Consumer<T>의 경우, accept( ) 메서드 파라미터는 T 객체를 하나를 갖게 됩니다. 당연히 람다식도 한 개의 파라미터를 사용하죠. 

 

Consumer<String> consumer = t -> { t 사용 실행문; }

 

BiConsumer<T, U>는 accept( ) 메서드에서 파라미터 T와 U 두 개의 객체를 갖습니다. 역시 사용 방법은 아래와 같습니다. 

 

BiConsumer<String, String> consumer = (t, u) -> { t와 u를 사용하는 실행문; }

 

 

DoubleConsumer의 경우 제네릭을 사용하지 않고 accpet( ) 메서드의 파라미터는 double 하나만을 갖습니다. 

 

DoubleConsumer consumer = d -> { d를 사용하는 실행문; }

 

 

마지막으로 ObjIntConsumer<T> 를 살펴보겠습니다. accept( ) 메서드에서는 T와 int 타입을 각각 갖습니다. 제네릭으로 지정한 타입 T와 int 값을 받아서 사용하게 되죠. 

 

ObjIntConsumer<String> consumer = (t, i) -> { t와 i를 사용하는 실행문; }

 

 

 


 

 

import java.util.function.*;

public class ExampleMain {	
	public static void main(String[] args) {
		Consumer<String> consumer = t -> System.out.println(t + "Test");
		consumer.accept("Parameter ");
		
		BiConsumer<String, String> biConsumer = (t, u) -> System.out.println(t + " " + u);
		biConsumer.accept("Bi Parameter", "Test");
		
		DoubleConsumer doubleConsumer = d -> System.out.println(d + " " + "Test");
		doubleConsumer.accept(99.9);
		
		ObjIntConsumer<String> objIntConsumer = (t, i) -> System.out.println(t + " " + i);
		objIntConsumer.accept("Parameter", 99);
	}
}

/* 출력
Parameter Test
Bi Parameter Test
99.9 Test
Parameter 99
*/