Java의 람다란?
람다 표현식(Lambda Expression)이란? 함수형 프로그래밍을 구성하기 위한 함수식이며, 간단히 말해 자바의 메소드를 간결한 함수 식으로 표현한 것.
이름없는 함수, 익명 함수(anonymous function) 이라고도 한다.
int add(int x, int y) {
return x + y;
}
// 위의 메서드를 람다 표현식을 이용해 아래와 같이 단축 시킬수 있다. (메서드 반환 타입, 메서드 이름 생략)
(int x, int y) -> {
return x + y;
};
// 매개변수 타입도 생략 할 수 있다.
(x, y) -> {
return x + y;
};
// 함수에 리턴문 한줄만 있을 경우 더욱 더 단축 시킬 수 있다. (중괄호, return 생략)
(x, y) -> x + y;
public class VariableCapture {
private void run() {
// 로컬 클래스, 익명 클래스, 람다에서 이 변수를 참조하면 effective final로 변경
int baseNumber = 10;
// 람다
IntConsumer lambda = (i) -> System.out.println(i + baseNumber); // i + 10
// 로컬 클래스
class LocalClass {
void printBaseNumber() {
System.out.println(baseNumber); // 10
}
}
// 익명 클래스
IntConsumer intConsumer = new IntConsumer() {
@Override
public void accept(int i) {
System.out.println(i + baseNumber); // i + 10
}
};
}
}
final
로 선언되어 있어야 한다.final
로 선언되지 않은 자유 변수는 final
처럼 동작해야 한다. (effectively final)final
이어야 할까?final
처럼 동작해야 하는 것이다.