- 함수의 이름이 존재하지 않는 익명 함수(Anonymous Function)를 지칭한다.
- 프로그래밍 언어에서 사용되는 개념으로 Java에 국한되는 것이 아니다.
- Java의 경우 Java 8 부터 도입
- 매개변수와 함수의 본문이 존재한다.
- 실행문 자체에 람다식을 전달하여 구현한다.
- 함수로 표현된 코드에 비해 코드 라인 수가 짧다.
- 가독성이 높다.
- 병렬 프로그래밍이 편리하다.
- 재사용이 불가능한 일회성 함수이다.
- 같은 기능의 람다식을 여러번 사용하면 오히려 가독성이 떨어질 수 있다.
(매개변수) -> {함수 본문}; // 기본 (매개변수) -> 함수 본문; // 함수 본문이 한줄인 경우 (단, 반환 타입이 void가 아닌 경우 괄호 생략 불가) () -> {함수 본문}; // 매개변수가 하나인 경우
(x, y) -> {x + y}; (x, y) -> x + y; (x, y) -> { return x + y; } () -> {x * 2};
@FunctionalInterface
interface IFuncItf {
int sum(int a, int b);
}
class CallMethod {
public int test(IFuncItf funcItf, int x, int y) {
System.out.println("호출==========");
return funcItf.sum(x, y);
}
}
public class Lambda {
public static void main(String[] args) {
int a = 2;
int b = 3;
int sum = 0;
// 람다식 사용 x
CallMethod withoutLambda = new CallMethod();
sum =
withoutLambda.test(new IFuncItf() {
@Override
public int sum(int x, int y) {
return x + y;
}
}, a, b);
System.out.println("withoutLambda sum : " + sum);
// 람다식 사용
CallMethod withLambda = new CallMethod();
sum =
withLambda.test((x, y) -> {
return x + y;
}, a, b);
System.out.println("withLambda sum : " + sum);
}
}
결과
호출==========
withoutLambda sum : 5
호출==========
withLambda sum : 5