Java
람다식 기본 구조
re2592
2020. 12. 9. 21:42
다음과 같은 Runnable 인터페이스가 있다고 가정하고,
public interface Runnable {
void run(int a);
}
다음과 같은 메인 함수가 있다고 가정했을 때, 다음처럼 Runnable 인터페이스에 대입하는 3가지 방식은 모두 동일하다.
첫번째 방식은 기존 방식, 두번째 방식은 람다식을 활용한 방식이다. 세번째는 괄호 생략 버전
마지막에는 생성한 인터페이스에 대입한 객체를 실행시키는 구문이다( runnable1.run(111) / runnable2.run(222) )
public class TestLambda {
public static void main(String[] args) {
// Runnable 인터페이스에 익명 객체 대입
Runnable runnable1 = new Runnable() {
public void run(int a) {
System.out.println(a);
}
};
// Runnable 인터페이스에 람다식으로 익명 객체 대입
Runnable runnable2 = (a) -> {
System.out.println(a);
};
// 매개변수와 실행문이 1개라면 각각 괄호 및 중괄호 생략 가능
Runnable runnable3 = a -> System.out.println(a);
runnable1.run(111);
runnable2.run(222);
}
}
또한 다음과 같은 인터페이스가 있다고 가정하자.
public interface Accumulator {
int add(int x, int y);
}
이는 다음과 같이 활용할 수 있다.
Accumulator obj = (x, y) -> x + y;
System.out.println(obj.add(1, 2)); // 3 출력
Accumulator obj = (x, y) -> x + y;
의 경우는
Accumulator obj =(x, y) -> {return x+y;};
와 같다.
즉 람다식에서는 중괄호{}에 return문 만 있을 경우에는 생략이 가능하다.
** 보는 것 처럼 람다식은 하나의 메소드를 정의하기 때문에 두 개 이상의 추상 메소드가 선언된 인터페이스에는 구현 객체를 생성할 수 없다. 이러한 인터페이스를 함수적 인터페이스(functional interface)라고 한다. 함수적 인터페이스의 경우 @FunctionalInterface 어노테이션을 붙이면 2개 이상의 추상 메소드가 선언되지 않도록 컴파일러가 체킹해준다.
출처 : 이것이 자바다 신용권의 Java 프로그래밍 정복(저자 : 신용권 / 출판사 : 한빛미디어)