주요 인터페이스
1. Function<T, R>: T 타입의 입력을 받아 R 타입의 출력을 반환
1) 메서드: R apply(T t)
ex)
Function<Integer, String> intToString = String::valueOf;
String result = intToString.apply(123); // "123"
2) 사용 예
- 데이터 변환: 한 타입의 데이터를 다른 타입으로 변환할 때 사용.
- 매핑 작업: 컬렉션의 요소를 다른 타입으로 매핑할 때 사용.
2. Consumer< T >: T 타입의 입력을 받아서 어떤 동작을 수행(반환값 없음)
1) 메서드: void accept(T t)
ex)
Consumer<String> print = System.out::println;
print.accept("Hello, World!"); // 출력: Hello, World!
2) 사용 예
- 출력 작업: 데이터를 출력하거나 로깅할 때 사용.
- 상태 변경: 객체의 상태를 변경하거나 외부 시스템에 영향을 줄 때 사용.
3. Supplier< T >: 입력값 없이 T 타입의 출력
1) 메서드: T get()
ex)
Supplier<Date> dateSupplier = Date::new;
Date date = dateSupplier.get(); // 새로운 Date 객체 생성
2) 사용 예
- 객체 생성: 새로운 객체나 값을 생성할 때 사용.
- 지연 평가: 값이 실제로 필요할 때까지 계산을 미루는 경우에 사용.
4. Predicate< T >: T 타입의 입력을 받아 boolean 값을 반환
1) 메서드: boolean test(T t)
ex)
Predicate<String> isEmpty = String::isEmpty;
boolean result = isEmpty.test(""); // true
2) 사용 예
- 필터링: 컬렉션에서 특정 조건을 만족하는 요소를 필터링할 때 사용.
- 조건 검사: 특정 조건을 만족하는지 검사할 때 사용.
* 두 개의 입력값을 받아 하나의 출력을 반환하고자 하면 해당 인터페이스에 Bi를 붙인다
ex)
BiFunction<Integer, Integer, Integer> sum = Integer::sum;