Java Section 17 : 람다식
[람다식]
: 함수의 이름이 없는 익명 함수를 만들기 위한 표현식
-> 식별자 없이 실행 가능한 함수
[람다식 문법]
- 메서드의 이름과 반환 타입을 제거하고 화살표 기호(→)를 사용해 구현함.
- 문법이 간결해지고 원하는 결과를 쉽게 집계할 수 있다.
- 매개변수 자료형을 생략할 수 있으며, 매개 변수가 한 개인 경우에는 소괄호도 생략할 수 있다. (두 개 이상일 경우에는 불가능)
- 구현 내용이 한 문장이거나 return이 없다면 (void) 구현부에 있는 중괄호{ }도 생략 가능
-> 함수의 내용이 두 문장 이상이거나 return 타입이 있으면 생략 불가능
- 중괄호 안의 구현 코드가 return문만 존재하면 중괄호, return 모두 생략 가능
※ 원래 메서드
int add(int x, int y) {
return x + y;
}
※ 람다식
(x, y) → {return x + y;}
[함수형 인터페이스]
: 오직 하나의 추상 메서드가 선언된 인터페이스만이 람다식의 타겟 타입이 됨.
- 람다식은 인터페이스를 사용할 때 번거로운 과정을 생략할 수 있으나, 하나의 기능(메서드)만을 정의할 수 있다.
- 모든 인터페이스를 람다식의 타겟 타입으로 사용할 수 없다.
public interface Calc {
int add(int x, int y);
}
@ FunctionalInterface : 함수형 인터페이스라는 의미. 메서드를 2개 이상 선언하면 문법적으로 오류를 발생시킴
[람다식과 외부변수]
- 람다식 내부에서 지역변수를 사용하려면 그 지역변수는 final로 선언되어야 한다.
-> JDK 1.8 이후로는 final 키워드를 쓰지 않아도 알아서 final 변수로 인정해주는 effective final 기능 지원
- 'variable capture' : 람다식 내부에서 지역변수를 사용할 경우, 복사해 사용하므로 값을 그대로 사용하는 것은 가능하지만 수정이 불가함