람다 표현식
java ·함수형 인터페이스의 인스턴스를 만드는데 사용하며, 코드를 줄일 수 있다
구조
() 매개변수 -> {} 바디
매개변수에서 타입 생략 가능 {} 생략 가능
특징
선언부와 같은 스코프를 가진다.
선언부와 변수명이 중복이 되지 않는다.
변수 캡처
final이거나 effectevely final인 경우에만 참조 가능하다. 클래스 구현체와 달리 쉐도잉하지 않는다, 쉐도잉은 상위 scope의 변수를 덮는것이다.
void run(){
int baseNumber = 10;
// 선언부와 같은 scope이기 때문에 매개변수로 baseNumber를 사용할수 없다
// IntConsumer printInt = baseNumber -> System.out.println(baseNumber) X
}
추가
java 8부터 final이 아니어도 로컬이나 익명 함수에서 외부 변수를 사용 가능하다, 단 effectevely final것
effectevely final은 변수가 선언되고 값이 변경되지 않는 사실상 final인 변수들이다.