개발/Java
Java 기초부터 다시 - interface Consumer<T> , Supplier<T>, Predicate<T>
삽쟁이
2024. 1. 29. 16:34
반응형
1. Consumer<T>
@FunctionalInterface
public interface Consumer<T> {
/**
* Performs this operation on the given argument.
*
* @param t the input argument
*/
void accept(T t);
.....
자바8 이후 부터 제공되는 기본 함수형 인터페이스 Consumer<T>은 T 타입의 인자를 받아 이름 그대로 특정 작업(Accept)을 수행 하는 함수형 인터페이스 이다.
예제
//Integer 값을 받아, 출력한는 인터페이스
Consumer<Integer> printT = new Consumer<Integer>() {
@Override
public void accept(Integer integer) {
System.out.println("Consumer 는 리턴값이 없어요.>>>" + integer);
}
};
//람다 표현
Consumer<Integer> printT = integer ->
System.out.println("Consumer 는 리턴값이 없어요.>>>" + integer);
특정 값을 인자로 받아 자유롭게 처리가 가능 하다.
사용 예제 (기타 Default 메소드)
public class SomethingConsumer implements Consumer<Integer> {
@Override
public void accept(Integer integer) {
System.out.println("SomeThingConSumer Plus 10 >>>>" + integer + 10);
}
@Override
public Consumer<Integer> andThen(Consumer<? super Integer> after) {
return Consumer.super.andThen(after);
}
}
andThen: 본체의 Apply를 적용 후, 인자로 받은 Funtion의 Apply 적용.
Function의 compose와 addThen처럼 실제 사용을 해보자.
SomethingConsumer plus10 = new SomethingConsumer();
Consumer<Integer> minus10 = (i) -> System.out.println("SomethingConsumer minus10 >>>> " + (i - 10));
Consumer<Integer> multiply2 = (i) -> System.out.println("SomethingConsumer Multiply *2 >>> " + (i * 2));
plus10.andThen(minus10.andThen(multiply2)).accept(30);
/**
RESULT
SomeThingConSumer Plus 10 >>>>40
SomethingConsumer minus10 >>>> 20
SomethingConsumer Multiply *2 >>> 60
**/
순서 대로 plus10의 accept > minus10의 accept > multiply2 의 accept가 실행되는 것을 확인할 수 있다.
2. Supplier<T>
@FunctionalInterface
public interface Supplier<T> {
/**
* Gets a result.
*
* @return a result
*/
T get();
}
자바8 이후 부터 제공되는 기본 함수형 인터페이스 Suppplier<T>은 매개변수를 받지 않고 정의된 T 타입의 변수를 받환하는 추상 메소드 get()을 제공한다.
예제
Supplier<Integer> get10 = new Supplier<Integer>() {
@Override
public Integer get() {
System.out.println("Supplier는 파라미터 없이 바로 넘겨요>>>>" + 10);
return 10;
}
};
Supplier<String> getString = () -> "Hello World";
System.out.println(get10.get()); // RESULT Integer 10
System.out.println(getString.get()); // RESULT "Hello World"
2. Predicate<T>
@FunctionalInterface
public interface Predicate<T> {
/**
* Evaluates this predicate on the given argument.
*
* @param t the input argument
* @return {@code true} if the input argument matches the predicate,
* otherwise {@code false}
*/
boolean test(T t);
....
자바8 이후 부터 제공되는 기본 함수형 인터페이스 Predicate<T>은 매개변수 T를 받은 후, 전달된 인자를 사용하여 boolean(true, false)를 반환 하는 인터페이스를 제공 한다.
예제
Predicate<Integer> isEven = i -> i%2 == 0;
System.out.println(isEven.test(10)); // RESULT true
System.out.println(isEven.test(7)); // RESULT false
System.out.println(isEven.test(1)); // RESULT false
반응형