람다식 : 메서드를 하나의 식(expression)으로 표현한 것. '익명 함수(anonymous function)'이라고도 한다.
람다식 작성
ex)
(매개변수 선언) -> {
...
}
람다식에서는 return이나 {}, 매개변수 타입등을 생략할 수 있다.
매개변수 타입의 경우 매개변수타입이 추론 가능한경우 생략이 가능하다.
{}내에 함수의 코드 즉 문장이 하나뿐인 경우 중괄호({})도 생략이 가능하다.
함수형 인터페이스(Functional Interface)
람다식은 메서드와같은 역할을 하지만 익명클래스의 객체와 같은것이다.
즉 람다식은 객체이다.
함수형 인터페이스를 통해 Lamdba 표현식을 사용한 경우이다.
람다식의 선언부와 함수형 인터페이스의 추상메서드의 선언부가 일치한다.
그렇기 떄문에 해당 함수를 정의하여 사용할 수 있으며 MyFunction2라는 함수형 인터페이스의 max함수가 람다식의 코드로 정의되는 것이다.
함수형 인터페이스는 오직 하나의 추상메서드만 정의되어야 한다는 제약이있다. 이러한 제약 덕분에 람다식과 인터페이스의 메서드가 1대1 매칭이 가능하다.
함수형 인터페이스 타입의 매개변수와 반환타입
메서드의 매개변수가 함수형 인터페이스 타입이라면, 메서드를 호출할 때 람다식을 참조하는 참조변수를 매개변수로 지정해주어야한다.
ex)
void aMethod(MyFunction f){
f.myMethod();
}
MyFunction f = () -> System.out.println("myMethod()");
aMethod(f);
또는 참조변수 없이 람다식을 바로 대입해줄 수 있다.
aMethod(()-> System.out.println("myMethod()"));
또한 메서드의 반환타입이 함수형 인터페이스 타입이라면, 이 함수형 인터페이스의 추상메서드와 동등한 람다식을 가리키느 참조변수를 반환하거나 람다식을 직접 반환할 수 있다.
ex)
MyFunction myMethod(){
MyFunction f = () ->{};
}
함수형 인터페이스를 통해 람다식을 바로 받아오거나, 메서드를 전달하는 등이 가능하다.
'Programming > JAVA' 카테고리의 다른 글
스트림(Stream) (0) | 2021.08.24 |
---|---|
다양한 함수형 인터페이스 & 메서드 참조 (0) | 2021.08.22 |
fork & join (0) | 2021.08.20 |
쓰레드의 동기화 (0) | 2021.08.20 |
쓰레드의 상태 및 제어 (0) | 2021.08.16 |