공부/Java

[Java] 람다식(Lambda)

ByeongJun 2023. 9. 18. 15:48
반응형

Java 8 버전부터 함수형 프로그래밍을 지원하기 위해

람다(lambda), 스트림(Steam)이 도입되었다. 

 

람다와 스트림을 사용하면 함수형 프로그래밍 스타일로 자바 코드를 작성할 수 있다. 

 

굳이 사용하지 않아도 자바 코드 작성 시 어려움은 없겠지만, 

작성해야 하는 코드의 양이 줄어들고 읽기 쉬운 코드를 만들 수 있다는 장점이 있다. 

 

 

 

람다(Lambda)

익명 함수(anonymous function)를 의미하며, 메서드를 하나의 식으로 표현한 것 

 

모든 메서드는 클래스에 포함되어야 하므로 클래스도 새로 만들어야 하고 

객체도 생성해야 메서드를 호출할 수 있지만,

 

람다식은 이 모든 과정없이 람다식 자체만으로 이 메서드의 역할을 대신 할 수 있다.

 

 

 

int calculator(int a, int b) {
   return a+b;
}
(int a, int b) -> a + b

정수 두 개를 합해 반환하는 메서드인 calculator() 메서드를 람다식으로 바꾸면

조금 더 간결해지는 것을 볼 수 있다.

 

파라미터를 왼쪽에 두고 가운데 화살표를 놓은 뒤에 반환할 값을 오른쪽에 둔다. 

 

(int a, int b) -> a * b   // before
(a, b) -> a * b           // after

매개변수 타입을 생략해도 컴파일러가 자동으로 추론해주기 때문에 생략 가능하다. 

참고로 두 매개변수 중 어느 하나의 타입만 생략하는 것은 불가능하다. 

ex)  (int a, b) -> a > b ? a : b 

 

 

 

(a) -> a * a             // before
a -> a * a               // after

(int a) -> a * a         // 정상
int a -> a * a           // 에러

파라미터의 괄호, 바디의 중괄호, 세미콜론까지 생략 가능하다. 

 

그러나 선언된 매개변수가 하나뿐인 경우에는 괄호()를 생략 할 수 있지만,

매개변수 타입이 있으면 괄호()를 생략 할 수 없다.

 

 

 

(int a, int b) -> { return a > b ? a : b; }   // before
(int a, int b) -> a > b ? a : b               // after

반환값이 있는 메서드의 경우, return문 대신 '식(expression)'으로 대신 할 수 있다. 

식의 연산결과가 자동적으로 반환값이 된다. 

 

이때는 '문장(statement)'이 아닌 '식'이므로 끝에 ';'을 붙이지 않는다. 

반응형