🌱람다식(Lambda Expression)이란?
자바는 함수적 프로그래밍을 위해 자바 8부터 람다식을 지원하였다. 자바에서 람다식을 수용한 이유는 자바 코드가 간결해지고, 컬렉션의 요소를 필터링하거나 매핑해서 원하는 결과를 쉽게 집계할 수 있기 때문이다.
람다식의 형태는 매개 변수를 가진 코드 블록이지만, 런타임 시에는 익명 구현 객체를 생성한다.
람다식 -> 매개 변수를 가진 코드 블록 -> 익명 구현 객체
예를 들어 Runnable 인터페이스의 익명 구현 객체를 생성하는 전형적인 코드는 다음과 같다.
Runnable runnable = new Runnable() {
public void run() {...}
}
위 코드에서 익명 구현 객체를 람다식[ ( ) -> {...} ]으로 표현하면 다음과 같다.
Runnable runnable = () -> { ... };
람다식은 "(매개변수) -> {실행코드}" 형태로 작성되는데, 마치 함수 정의 형태를 띠고 있지만 런타임 시에 인터페이스의 익명 구현 객체로 생성된다. 어떤 인터페이스를 구현할 것인가는 대입되는 인터페이스가 무엇이냐에 달려있다. 위 코드는 Runnable 변수에 대입되므로 람다식은 Runnable의 익명 구현 객체를 생성하게 된다.
🌱람다식(Lambda Expression)의 기본 문법
(타입 매개변수) -> { 실행문; }
(타입 매개변수, ...)는 오른쪽 중괄호 { } 블록을 실행하기 위해 필요한 값을 제공하는 역할을 한다. 매개 변수의 이름은 개발자가 자유롭게 줄 수 있다. -> 기호는 매개변수를 이용해서 중괄호 { }를 실행한다는 뜻으로 해석하면 된다.
다음은 예시다.
(int a) -> { System.out.println(a); }
매개변수 타입은 런타임 시에 대입되는 값에 따라 자동으로 인식될 수 있기 때문에 람다식에서는 매개 변수의 타입을 일반적으로 언급하지는 않는다. 그래서 위 코드는 다음과 같이 작성할 수 있다.
(a) -> { System.out.println(a); }
하나의 매개 변수만 있다면 괄호 ( )를 생략할 수 있고, 하나의 실행문만 있다면 중괄호 { } 도 생략할 수 있다. 그래서 위 코드는 다음과 같이 작성할 수 있다.
a -> System.out.println(a)
만약 매개 변수가 없다면 람다식에서 매개 변수 자리가 없어지므로 다음과 같이 빈 괄호( )를 반드시 사용해야 한다.
() -> { 실행문; ... }
중괄호 { }를 실행하고 결과값을 리턴해야 한다면 다음과 같이 return 문으로 결과값을 지정할 수 있다.
(x,y) -> { return x+y };
중괄호 { }에 return 문만 있을 경우, 람다식에서는 return문을 사용하지 않고 다음과 같이 작성하는 것이 정석이다.
(x,y) -> { x+y };