1. 람다식이란?
람다식(Lambda expression)은 메서드를 하나의 '식(expression)'으로 표현한 것이다. 람다식은 함수를 간단하면서도 명확한 식으로 표현할 수 있게 해준다.
람다식을 '익명 함수(anonymous function)'이라고도 한다.
모든 메서드는 클래스에 포함되어야 하므로 클래스도 새로 만들어야 하고, 객체도 생성해야만 비로소 메서드를 호출할 수 있다. 그러나 람다식은 이 모든 과정 없이 오직 람다식 자체만으로도 메서드의 역할을 대신할 수 있다.
람다식은 메서드의 매개변수로 전달되어지는 것이 가능하고, 메서드의 결과로 반환될 수도 있다. 람다식으로 인해 메서드를 변수처럼 다루는 것이 가능해졌다.
*메서드는 함수와 같은 의미지만, 특정 클래스에 반드시 속해야 한다는 제약이 있기 때문에 메서드라는 용어를 사용한 것
2. 람다식 작성하기
람다식은 '익명 함수'답게 메서드에서 이름과 반환타입을 제거하고 매개변수 선언부와 몸통{ } 사이에 '->'를 추가한다.
반환타입 메서드이름 (매개변수 선언) {
문장들
}
↓
반환타입 메서드이름(매개변수 선언) -> {
문장들
}
예를 들어 두 값 중에서 가장 큰 값을 반환하는 메서드 max를 람다식으로 변환하면, 아래와 같이 된다.
int max (int a, int b) {
return a > b ? a : b;
}
↓
(int a, int b) -> {return a > b ? a : b;}
반환값이 있는 메서드의 경우, return문 대신 '식(expression)'으로 대신 할 수 있다. 식의 연산결과가 자동적으로 반환값이 된다. 이때는 '문장(statement)'이 아닌 '식'이므로 끝에 ';'를 붙이지 않는다.
(int a, int b) -> { return a > b ? a : b; }
↓
(int a, int b) -> a > b ? a : b
람다식에 선언된 매개변수의 타입은 추론이 가능한 경우는 생략할 수 있는데, 대부분의 경우에 생략이 가능하다.
(int a, int b) -> a > b ? a : b
↓
(a, b) -> a > b ? a : b
선언된 매개변수가 하나뿐인 경우에는 괄호()를 생략할 수 있다. 단, 매개변수의 타입이 있으면 괄호()를 생략할 수 없다.
(a) -> a * a
(int a) -> a * b
↓
a -> a * a //OK
int a -> a * a //에러
괄호 { } 안의 문장이 하나일 때는 괄호 { }를 생략할 수 있다. 이 때 문자으이 끝에 ';'를 붙이지 않아야 한다는 것에 주의하자.
(String name, int i) -> {
System.out.println(name+"="+i);
}
↓
(String name, int i) ->
System.out.println(name+"="+i)
괄호 { } 안의 문장이 return문일 경우 괄호 { }를 생략할 수 없다.
출처 : 남궁성. 「자바의 정석」. 도우출판. 2016
'프로그래밍언어 > Java' 카테고리의 다른 글
[자바의 정석] 12. 애너테이션(annotation) (0) | 2023.09.30 |
---|---|
[자바의 정석] 12. 열거형(enums) (0) | 2023.09.29 |
[자바의 정석] 12. 지네릭스 (0) | 2023.09.28 |
[자바의 정석] 11. 컬렉션 프레임웍 - Properties / Collection (0) | 2023.08.07 |
[자바의 정석] 11. 컬렉션 프레임웍 - HashMap과 Hashtable / TreeMap (0) | 2023.08.07 |