이번 포스팅에선 JAVA에서의 람다식에 대해 알아보고자 한다.
람다식이란(Lambda Expression) 무엇인가
- 람다식이란 함수를 하나의 식(Expression)으로 표현한 것이다.
- 함수를 람다식으로 표현하면 메서드의 이름이 필요 없기 때문에 람다식은 익명 함수(Anonymous Function)의 한 종류라고 볼 수 있다.
- 익명함수란 함수의 이름이 없는 함수로, 익명함수들은 모두 일급 객체이다. 이는 변수처럼 사용가능하면 매개 변수로 전달이 가능하다는 등의 특징을 갖고 있다.
선언 및 사용
// 기존의 함수 선언 방식
public String hello(){
return "Hello World";
}
// 람다 방식
() -> "Hello World";
이렇게 람다식을 사용하면 불필요한 코드를 줄이고 가독성을 높일 수 있다고들 하는데 나는 이게 과연 가독성이 좋은지는 잘 모르겠다.. 아무튼, 함수형 인터페이스의 인스턴스를 생성하여 함수를 변수처럼 선언하는 람다식에서는 메서드의 이름이 불필요하다고 여겨져서 이를 사용하지 않는다. 대신 컴파일러가 문맥을 살펴 타입을 추론한다.
람다식의 특징
- 람다식 내에서 사용되는 지역변수는 final이 붙지 않아도 상수로 간주된다.
- 람다식으로 선언된 변수명은 다른 변수명과는 중복될 수 없다.
람다식의 장/단점
- 코드를 간결하게 한다.
- 식에 개발자의 의도가 명확히 드러나 가독성이 높아진다. (?)
- 함수를 만드는 과정없이 한번에 처리할 수 있어 생산성이 높아진다.
-
병렬프로그래밍이 용이하다.
- 람다를 사용하면서 만든 무명함수는 재사용이 불가능하다.
- 디버깅이 어렵다.
- 람다를 남발하면 비슷한 함수가 중복 생성되어 코드가 지저분해질 수 있다.
- 재귀로 만드는 경우 부적합하다.