kotlin/java
Lambda 함수(1)
slow333
2023. 1. 6. 18:24
함수를 축약해서 일회용으로 사용하기 위해 만든 함수
Comparator 등에 많이 사용됨
int max(int a, int b) { return a >b ? a:b; } |
(a, b) -> a >b ? a: b // 끝에 ; 없음 |
int roll() { return (int) (Math.random()*10; } |
() -> (int) (Math.random()*10 |
int printVar(String name, int i){ System.out.println(name + "="+i); } |
(a, b) -> System.out.println(a+ "="+b) |
기본 적으로 이름이 없어서 원칙적으로 Object로 객체를 만들어야 하나
Object에는 필요한 Method가 없어 interface를 정의해서 함수를 정의해서 사용함
@FunctionalInterface
inteface MyFunction {
int max(int a, int b); // 기본적으로 public abstract 임. 생략 가능
}
MyFunction mf = (a, b) -> (a > b) ? a:b;
int value = mf(3, 6);
=> java에서 미리 정의한 함수형 인터페이스가 있어 이걸 사용하면 대부분 처리 가능(만들일 없음)
Consumer, Supplier, Function 대부분 이 3개면 처리 가능
Consumer => 입력만 있음 (println)
Supplier => 출력만 있음
Function => 입력, 출력
Predicate => boolean으로 출력
위의 것을 다시 구현 하면 다음과 같음(별도로 함수형 인터페이스를 구현할 필요 없음)
public class LambdaEx1 {
public static void main(String[] args) {
MyFunction mf = (a, b) -> (a > b) ? a : b;
int value = mf.max(3, 6);
Function<Integer, Integer> f = a -> a * 100;
int value1 = (int) f.apply(6);
Supplier<Integer> s = () -> (int)(Math.random()*9) +1;
Integer rand = s.get();
System.out.println(value1+", value : "+ value+", rand : "+rand);
}
}
@FunctionalInterface
interface MyFunction {
int max(int a, int b); // 기본적으로 public abstract 임. 생략 가능
}