한 개의 추상메서드를 갖는 인터페이스는 람다식을 이용해 익명 구현 객체로 표현이 가능합니다.
종류 | 추상 메서드 특징 | |
Consumer | 매개값은 있고, 리턴값은 없음 | 매개값 -> Conumer |
Supplier | 매개값은 없고, 리턴값은 있음 | Supplier -> 리턴값 |
Function | 매개값도 있고, 리턴값도 있음 주로 매개값을 리턴값으로 매핑 (타입 변환) |
매개값 -> Function -> 리턴값 |
Operator | 매개값도 있고, 리턴값도 있음 주로 매개값을 연산하고 결과를 리턴 |
매개값 -> Operator -> 리턴값 |
Predicate | 매개값은 있고, 리턴 타입은 boolean 매개값을 조사해서 true/false로 리턴 |
매개값 -> Predicate -> boolean |
특징은 리턴값이 없는 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 함수적 인터페이스는 매개변수가 없고 리턴값이 있는 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 값; }
매개값과 리턴값이 있는 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();
메서드 참조와 생성자 참조 (0) | 2024.02.05 |
---|---|
JPA 복합키 식별관계 (필수적, 선택적, @IdClass, @EmbeddedID) (0) | 2024.02.04 |
람다식 사용법 (0) | 2024.02.02 |
제네릭 정리 (0) | 2024.01.31 |
스레드 상태제어 (1) | 2024.01.30 |
댓글 영역