람다 식은 익명 클래스의 객체와 같다.
interface MyFunction{
public abstract int max(int a , int b);
}
이 인터페이스를 익명 객체로 생성 할 수 가 있다.
MyFunction f = new MyFunction(){
public int max(int a , int b){
return a>b?a:b;
}
}
위의 코드를 람다식을 이용을 해서 바꿀 수가 있다.
MyFunction f = (a, b) -> a > b ? a : b;
람다식으로 변환이 가능한 이유가 f의 인터페이스와 람다식의 메서드 선언부가 ㅇ리치하기 때문이다.
그리고 람다식도 실제로는 익명 객체 취급
람다식의 매개 변수의 타입과 개수 그리고 반환 값이 일치하기 때문이다.
일급 객체
1. 변수나 데이터에 할당 할 수 있어야 한다.
2. 객체의 인자로 넘길 수 있어야 한다.
3. 객체의 리턴값으로 리턴 할 수 있어야 한다.
함수형 인터페이스 | 메서드 | 설명 |
---|---|---|
java.lang.runnable | void run() | 매개 변수도 없고 반환값도 없음 |
Supplier | get() | 매개변수 X 반환값 O |
Consumer | accpet(T t) | 매개 변수 O 반환 값 X |
Function | R apply(T t) | 일반 적인 함수 하나의 매개 변수를 받아서 결과를 반환 |
Predicate | boolean test(T t) | 조건식을 표현하는데 사용, 매개 변수는 하나 반환 타입은 boolean |
UnaryOperator | T apply(T t) | 매개변수와 리턴 타입이 같은 Function의 자손 |
BinaryOperator | T apply(T t , T t2) | BiFunction의 자손 매개 변수 2개를 받고 리턴 타입도 같다 |
기본형 타입의 값을 처리할 떄도 래퍼 클래스를 사용하는 단점이 있는데 이를 해결 시켜 준다.
함수형 인터페이스 | 메서드 | 설명 |
---|---|---|
DoubleToIntFunction | int applyAsInt(double d) | A To B 함수는 입력이 A 타입이고 출력이 B 인 타입 |
ToIntFunciton | int applyAsInt(T value) | To B 함수는 출력이 B 타입이다. |
IntFunction | R apply(T t , U u) | AFuntion은 입력이 A타입이고 출력은 제네릭 타입이다 |
OBjIntConsumer | void accept(T t, U u) | ObjAFunction은 입력이 T, A타입이고 출력은 없다. |