람다 표현식

함수형 인터페이스의 인스턴스를 만드는데 사용하며, 코드를 줄일 수 있다

구조

() 매개변수 -> {} 바디

매개변수에서 타입 생략 가능 {} 생략 가능

특징

선언부와 같은 스코프를 가진다.
선언부와 변수명이 중복이 되지 않는다.

변수 캡처

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인 변수들이다.