상세 컨텐츠

본문 제목

함수 인터페이스 (Consumer, Supplier, Function)

기록 - 프로그래밍/Java

by wjjun 2024. 2. 3. 01:06

본문

 

한 개의 추상메서드를 갖는 인터페이스는 람다식을 이용해 익명 구현 객체로 표현이 가능합니다.

종류 추상 메서드 특징  
Consumer 매개값은 있고, 리턴값은 없음 매개값 -> Conumer
Supplier 매개값은 없고, 리턴값은 있음 Supplier -> 리턴값
Function 매개값도 있고, 리턴값도 있음
주로 매개값을 리턴값으로 매핑 (타입 변환)
매개값 -> Function -> 리턴값
Operator 매개값도 있고, 리턴값도 있음
주로 매개값을 연산하고 결과를 리턴
매개값 -> Operator -> 리턴값
Predicate 매개값은 있고, 리턴 타입은 boolean
매개값을 조사해서 true/false로 리턴
매개값 -> Predicate -> boolean

 

 

Consumer 함수적 인터페이스

특징은 리턴값이 없는 accept() 메서드를 갖고 있습니다. 메서드는 단지 매개값을 소비하는 역할만 합니다.

여기서 소비의 말은 사용만 할 뿐 리턴값이 없다는 뜻입니다.

 

매개 변수의 타입과 수에 따라서 아래와 같은 Consumer 들이 있습니다.

인터페이스명 추상 메서드 설명
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 값을 받아 소비

 

BiConsumer<T,U> 인터페이스를 타겟 타입으로 하는 람다식. accept() 메서드는 매개값으로 T와 U 두 객체를 가지므로 람다식은 두 개의 매개변수를 사용합니다. 타입 파라미터 T와 U에 String 이 대입되었기 때문에 람다식의 t와 u 매개 변수 타입은 각각 String이 됩니다.

BiConsusmer<String, String> consumer = (t, u) -> { t와 u를 소비하는 실행문; }

 

DobuleConsumer 인터페이스를 타겟 타입으로 하는 람다식으로 accept() 메서드는 매개값으로 double 하나를 가지므로 람다식도 한 개의 매개 변수를 사용합니다. d는 고정적으로 double 타입이 됩니다.

DoubleConsumer consumer = d -> { d를 소비하는 실행문; }

 

 

ObjIntConsumer<T> 인터페이스를 타겟 타입으로 하는 람다식으로 매개값으로 T객체와 int 값 두 개를 갖기 때문에 람다식도 두 개의 매개변수를 사용합니다. T가 String 타입이므로 람다식의 t 매개변수 타입은 String이 되고 i는 고정적으로 int 타입이 됩니다.

 

 

Supplier 함수적 인터페이스

Supplier 함수적 인터페이스는 매개변수가 없고 리턴값이 있는 getXXX() 메서드를 갖습니다.

메서드들은 실행 후 호출한 곳으로 데이터를 리턴(공급)하는 역할을 갖습니다.

인터페이스명 추상 메서드 설명
Supplier<T> T get() T 객체를 리턴
BooleanSupplier boolean getAsBoolean() boolean 값을 리턴
DoubleSupplier double getAsDouble() double 값을 리턴
intSupplier int getAsInt() int 값을 리턴
LongSupplier long getAsLong() long 값을 리턴

 

Supplier<T> 인터페이스를 타겟 타입으로 하는 람다식은 get() 메서드가 매개값을 가지지 않으므로 람다식도 ()를 사용합니다. 람다식 중괄호 {}는 반드시 한 개의 T 객체를 리턴하도록 해야합니다. T가 String 타입이므로 람다식의 중괄화 {}는 문자열을 리턴하도록 해야 합니다.

Supplier<String> supplier = () -> { ... ; return "문자열"; }

 

IntSupplier 인터페이스를 타겟 타입으로 하면 getAsInt() 메서드가 매개값을 가지지 않으므로 람다식도 ()를 사용합니다. 중괄호 {}는 반드시 Int값을 리턴하도록 해야합니다.

InSupplier supplier = () -> { ...; return int 값; }

 

 

Function 함수적 인터페이스

매개값과 리턴값이 있는 applyXXX() 메서드를 갖고 있습니다. 이 메서드는 매개값을 리턴값으로 매핑(타입 변한)하는 역할을 합니다.

인터페이스명 추상메서드 설명
Function<T, T> R apply(T t) 객체 T를 객체 R로 매핑
BiFunction<T, U, R> R apply(T t, U u) 객체 T와 객체 U를 객체 R로 매핑 
DoubleFunction<R> R apply(int value) double을 객체 R로 매핑
IntFunction<R> double applyAsLong(int value) int를 double로 매핑
IntToDoubleFunction long applyAsDouble(long value) long을 double로 매핑
LongToDoubleFunction double applyAsDouble(long value) long을 double로 매핑
ToDoubleFunction<T> double applyAsDouble(T t) 객체 T를 double로 매핑
ToIntBiFunction<T, U> int applyAsInt(T t, U u) 객체 T와 U를 int로 매핑
ToLongFunction<T> long applyAsLong(T t) 객체 T를 long으로 매핑

 

Function<T, R> 인터페이스를 타겟 타입으로 apply() 메서드는 매개값으로 T객체 하나를 갖고 람다식도 한 개의 매개 변수를 사용합니다. apply() 메서드의 리턴 타입이 R이므로 람다식 중괄호 {}의 리턴 값은 R 객체가 됩니다. T가 Student 타입이고 R이 String 타입이므로 t 매개 변수 타입은 Student가 되고, 람다식의 중괄호 {} 는 String을 리턴해야 합니다.

Function<Student, String> function = t -> {return t.getName(); }
Function<Student, String> function = t -> t.getName();

 

 

'기록 - 프로그래밍 > Java' 카테고리의 다른 글

메서드 참조와 생성자 참조  (0) 2024.02.05
JPA 복합키 식별관계 (필수적, 선택적, @IdClass, @EmbeddedID)  (0) 2024.02.04
람다식 사용법  (0) 2024.02.02
제네릭 정리  (0) 2024.01.31
스레드 상태제어  (1) 2024.01.30

관련글 더보기

댓글 영역