메소드와 유사하며 인라인으로 구현이 가능하다. 또한 일급 객체로 취급할 수 있게 만든다.
함수형 인터페이스를 구현하기 위한 방법 중 하나.
Java에서 Lambda expression은 항상 순수 함수(Pure Function)이어야한다.
이러한 이유로, 람다식은 자신을 선언한 클래스의 final
또는 Effective final
만 참조 가능하다. (Capturing)
‼️Effective final
은 final
로 선언되지 않는 변수가 불변하다는 것.
순수함수 = 수학적 함수. f(x) = y라면, 어느 시점에서나 f(x) = y라는 값을 보장해야한다.
람다식은 자신을 선언한 클래스와 동일한 Scope에 존재한다.
클래스와 다르게 람다는 동일한 스코프에 존재하기 때문에, 자신을 선언한 클래스의 지역 변수와 동일한 이름을 가진 변수를 선언할 수 없다.
T
는 인자 값의 타입을 의미한다. body statement는 해당 람다식이 수행하는 행위
를 기술한다. Function<Integer, Integer> fn = (a) -> {return a + 10;};
이러한 타입 추론은 제너릭의 타입 정보가 컴파일 타임에 소거되는 것에 기인한다.
{}
를 생략할 수 있다. Consumer<Integer> consumer = (a) -> System.out.println("hello" + a);
return
또한 생략할 수 있다. Function<Integer, Integer> fn = (a) -> a + 10;
()
를 생략할 수 있다. 단 이 경우, 인자 타입을 생략 해야한다 Function<Integer, Integer> fn = a -> a + 10;
람다
형식으로 참조하는 것