Java

[Java] 람다식(Lambda expression) - 생성 규칙 / 메서드 참조

Hyeonni 2022. 9. 15. 13:18

 

자바가 등장한 이후로 자바가 더 이상 예전의 자바가 아니라는 말을 만들어낸 두 가지 변화가 있다. 바로 JDK1.5의 지네릭스(generics)의 등장이고, 다른 하나는 JDK 1.8(자바 8)부터 추가된 람다식이다. 특히 자바는 람다식을 추가하면서 객체지향 언어인 동시에 함수형 언어가 되었다. 즉, 함수형 언어의 장점을 자바에 적용한 것이라고 할 수 있다. 

 

 

람다식이란?

 

람다식(lamda expression)은 메서드를 하나의 식(expression)으로 표현한 것이다. 람다식을 사용하면 함수를 간단하면서도 명확한 식으로 표현할 수 있게 해준다. 메서드를 람다식으로 표현하면 메서드의 이름과 반환 값이 없어지므로, 람다식을 '익명 함수(anonymous function)'라고도 한다.

 

자바에서는 메서드를 생성하려면 클래스를 생성하고 그 내부에 메서드를 생성하는 방식이다. 하지만 람다식을 사용한다면 클래스도 생성할 필요가 없을 뿐더러 람다식을 생성하는 과정에서 원래 메서드에서는 명시해야 할 메서드 명과 리턴형도 생략이 가능하기 때문에 더 간결하게 메서드를 표현할 수 있게 되는 것이다. 또한 더 나아가서 메서드의 매개변수형도 추론이 가능하다면 생략이 가능하기 때문에 엄청 간단한 식을 통해 메서드를 만드는 것과 같은 효과를 볼 수 있다.

 

 

람다식 생성 규칙

 

  • 람다식은 익명 함수답게 메서드에서 이름과 반환타입을 제거하고 매개변수 선언부와 몸통{} 사이에 '->'를 추가한다.

 

  • 반환 값이 있는 메서드의 경우, 'return'과 ';'을 생략할 수 있다.
    return문 대식 식(expression)으로 대신할 수 있다. 이 경우 식의 연산 결과가 반환 값이 된다. 이때는 문장(statement)이 아닌 식이므로 끝에 ';'를 붙이지 않는다. 

 

  • 람다식에 선언된 매개변수의 타입을 추론이 가능한 경우 생략할 수 있다.
    대부분의 경우가 생략이 가능하다. 람다식에 반환타입이 없는 이유도 항상 추론이 가능하기 때문이다. 그러나 두 개의 매개변수가 있는데 하나의 타입만 생략하는 것을 불가능하기 때문에 모두 다 쓰거나 모두 안 쓰거나 선택해야 한다.

 

  • 선언된 매개변수가 하나뿐인 경우에는 괄호()를 생략할 수 있다. 단 매개변수의 타입이 있으면 괄호를 생략할 수 없다.

 

  • 괄호{} 안의 문장이 하나일 때는 괄호를 생략할 수 있다. 이 때 문장의 끝에 세미콜론을 붙이지 않아야 한다.
    그러나 괄호 안의 문장이 return문일 경우 괄호를 생략할 수 없다.

 

 

 

지금까지 다룬 람다식을 이용하면 아래 코드처럼 간편하게 표현할 수 있다!

 

메서드 참조(Method Reference)

 

람다식보다 더 간결하게 표현하는 방법이 바로 메서드 참조이다. 하나의 메서드만 호출하는 경우에 적용할 수 있다.

 

위 코드처럼 표현한다. 컴파일러는 생략된 부분을 우변의 parseInt 메서드의 선언부와 좌변의 Function 인터페이스의 지정된 지네릭 타입으로부터 쉽게 알아낼 수 있다.

 

하나의 메서드만 호출하는 람다식은 
'클래스 이름::메서드 이름' or '참조변수::메서드 이름' 형식으로 메서드 참조로 변환할 수 있다.

 

이런 식으로 생성자도 메서드 참조를 이용해 간략하게 만들 수 있다.

 

 

 

람다식의 사용을 위해선 다음 글도 보면 도움이 됩니다.

[Java] 함수형 인터페이스(Functional Interface) - 매개변수, 형 변환, 변수 참조

 

[Java] 함수형 인터페이스(Functional Interface) - 매개변수, 형 변환, 변수 참조

함수형 인터페이스는 람다식과 밀접한 관련이 있는 내용이다. 람다식을 잘 모르거나 다시 복습을 원한다면 아래 글을 참고하면 된다. 람다식(Lambda expression) - 생성 규칙 [Java] 람다식(Lambda expressio

ta-mi.tistory.com

 


자바의 정석(남궁성)을 정리한 글입니다.