Lambda Expression 람다식
- JDK 1.8 부터 함수형 언어 추가 (OOP + FP)
- 함수 (메서드) 를 간단한 ‘식 (expression)’ 으로 표현하는 방법
int max(int a, int b){
return a > b ? a : b;
}
- 익명 함수 (이름이 없는 함수, anonymous function)
- 메서드에서 반환 타입과 이름을 지운다.
- 매개변수와 중괄호
{}
사이에 화살표 →
를 넣는다.
- 함수와 메서드의 차이
- 함수는 일반적 용어, 메서드는 객체지향개념 용어
- 함수는 클래스에 독립적, 메서드는 클래스에 종속적
람다식 작성
int max(int a, int b){
return a > b ? a : b;
}
~~int max~~(int a, int b) **->** {
return a > b ? a : b;
}
- 메서드의 이름과 반환 타입을 제거하고 화살표를
→
중괄호 {}
앞에 추가
(int a, int b) -> {
return a > b ? a : b;
}
(int a, int b) -> {
~~return~~ a > b ? a : b;
}
- 반환 값이 있는 경우, 식이나 값만 적고 return 문 생략 가능 (끝에 세미콜론
;
안 붙임)
(int a, int b) -> a > b ? a : b
(a, b) -> a > b ? a : b
- 매개변수의 타입이 추론 가능하면 생략 가능 (대부분의 경우 생략 가능)
람다식 주의 사항
- 매개변수가 하나인 경우, 타입이 없을 때만 괄호
()
생략 가능
- 블록 안의 문장이 하나뿐 일 때, 괄호
{}
생략 가능 (끝에 ;
안 붙임)
람다식 == 익명 객체
- 람다식은 익명 함수가 아니라 익명 객체
- 람다식 (익명 객체) 를 다루기 위한 참조 변수가 필요
함수형 인터페이스
@FunctionalInterface
public interface MyFunction {
public abstract int max(int a, int b);
}
MyFunction f = (a, b) -> a > b ? a : b;
int value = f.max(3,5);
- 함수형 인터페이스 타입의 참조변수로 람다식을 참조 가능
- 람다식 (익명 객체) 를 다루기 위한 참조 변수의 타입은 함수형 인터페이스
- 함수형 인터페이스의 메서드와 람다식의 매개변수 개수와 반환 타입이 같아야한다.