Ⅱ. 자바 API의 함수형 인터페이스
1. 함수형 인터페이스와 표식 (어노테이션 annotaion)
- 함수형 인터페이스 : 기능 하나를 정의하는 인터페이스 (인스터스가 필요하지 않을 수도 있음)
※ 함수형 인터페이스의 조건 : 추상 메소드가 딱 하나만 존재
- @FunctionalInterface : 이 것이 함수형 인터페이스임을 명시하는 어노테이션
// Example
package sample;
// 이 것이 함수형 인터페이스임을 명시하는 어노테이션
@FunctionalInterface
interface Calculating {
int cal(int a, int b); // 함수형 인터페이스
// default 메소드도 추상메소드가 아님
default int muliply(int a, int b) {
return a * b;
}
// static 메소드도 추상메소드가 아님
static int divide(int a, int b) {
return a / b;
}
// 즉, 추상메소드가 하나라면 다른 메소드가 들어와도 가능
}
public class Main {
public static void main(String[] args) {
Calculating c;
c = (a, b) -> a + b;
System.out.println(c.cal(55, 44));
}
}
2. 함수형 인터페이스가 정의된 패키지 사용하기
- Predicate<T> 사용
- Predicate<T> 내에는 test(T t) 메소드가 존재 (전달인자를 근거로 참 또는 거짓을 반환하는 메소드)
※ Predicate : Type T 인자를 받고 boolean을 리턴하는 함수형 인터페이스
// Example
package sample;
import java.util.function.Predicate;
import java.util.*;
// Predicate<T> 사용
public class Lambda04 {
static int sum(Predicate<Integer> p, List<Integer> list) {
int s = 0;
// test()에 인자를 전달하면 boolean이 리턴
for(int n: list) {
if(p.test(n)) { // test가 true를 반환하는 숫자만 분리해서 중첩함
s += n;
}
}
return s;
}
public static void Main(String[] args) {
// Type T 인자를 받고 boolean을 리턴
Predicate<Integer> p;
// boolean test(Integer number)에 주어진 숫자가 5의 배수이면 true를 반환
p = (number) -> number % 5 == 0;
List<Integer> list = new ArrayList<>();
for(int i = 0; i <= 50; i++) {
list.add(i);
}
int result = sum(p, list);
System.out.println(result); // 275
}
}
- Function 사용
- R apply(T t) : T와 R이 모두 제니릭 타입 매개변수
// Example
package sample;
import java.util.*;
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
// 문자열을 받아서 정수를 반환함
Function<String, Integer> f;
f = s -> s.length();
System.out.println(f.apply("Hello")); // 5
System.out.println(f.apply("I am a good boy")); // 15
}
}
'Programming Language > Java' 카테고리의 다른 글
네트워크(Network) (0) | 2022.07.25 |
---|---|
IO (Input / Output) (입출력) 스트림 (0) | 2022.07.21 |
람다식 - 1. 람다식(Lambda Expression) (0) | 2022.07.21 |
랜덤 클래스(Random Class)와 사용자 입력(User Input) (0) | 2022.07.20 |
컬렉션 프레임워크 - 6. Stack, Deque (0) | 2022.07.20 |