람다식
- 메서드(함수)를 하나의 식으로 표현
- 함수형 프로그래밍(일등 함수)
함수 == 변수 / 함수가 값으로 사용
- 함수란?
- 하나의 기능(단일기능)
- 함수는 값으로 사용
- 매개변수 : 사용자 정의 가능
- 반환값 : 참고) 자바스크립트 - 클로저, 새로운 함수를 만드는 함수인 팩토리 함수
자바는 함수는 값으로 사용 불가
- 인터페이스의 객체가 되는 조건을 이용
- 형식을 단순화
names.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
==
names.forEach(s -> System.out.println(s));
1) 접근 제어자, 반환값 타입, 함수명을 생략
2) 매개변수 정의 부분과 함수 구현 부분({ }) 사이에 -> 추가
3) 매개변수의 자료형 생략 가능
4) 구현코드가 한줄일때는 { ... } 생략 가능, return 예약어도 생략 해야 된다.
5) 최대한 짧게 쓰는 방향(변수명도 한 글자로 하는 것이 권장)
public interface Calculator {
int add(int num1, int num2);
}
위 인터페이스를 객체화 할때,
public class Ex02 {
public static void main(String[] args) {
Calculator cal = new Calculator() {
@Override
public int add(int num1, int num2) {
return num1 + num2;
}
};
}
}
이렇게 생성하지만 람다식을 사용하면
public class Ex02 {
public static void main(String[] args) {
Calculator cal = (a, b) -> a + b;
}
}
간단하게 표현이 가능하다.
함수형 인터페이스(Functional Interface)
: 단일 기능, 단일 역할, 형식상 제한 조건
함수형 인터페이스 타입의 매개변수와 반환 타입
->명확한 형식 제어를 위한 애노테이션
@FuntionalInterface
java.util.function패키지
:자주 사용하는 함수 유형의 인터페이스 정의
1) 매개변수가 X, 반환값 1개
Supplier<T>
: T get()
2) 매개변수가 1개, 반환값 0개
Consumer<T>
: void accept(T t)
3) 매개변수가 1개 반환값도 1개
Function<T,R>
: R apply(T t)
4) 매개변수가 1개, 반환값은 boolean(논리값)
Predicate<T>
: boolean test(T t)
매개변수 2개
1) 매개변수가 2개, 반환값 X
BiConsumer<T, U>
: void accept(T t, U u)
2) 매개변수가 2개, 반환값 1개
BiFunction<T,U,R>
: R apply(T t, U u)
3) 매개변수가 2개, 반환값 boolean
BiPredicate<T, U>
: boolean test(T t, U u)
ex) DoubleToLongFunction
-double : 매개변수 타입
-long : 반환값 타입
ToIntFunction<T>
-int : 반환값 타입
-T : 매개변수 타입
IntFunction<R>
int : 매개변수 타입
R : 반환값 타입
Function의 합성과 Predicate의 결합
Function
andThen(Function ... )
f.andThen(g) -> f -> g
compose(..)
g.compose(f) -> f -> g
Predicate : 조건식, 논리 연산과 관련
and
or
negate
메서드 참조