Lambda
익명 클래스의 사용을 Java SE 8부터는 람다 표현식을 사용하여 자바에서도 함수형 프로그래밍을 할 수 있게 되었습니다.
더욱 간결하고 직관적으로 구현 가능 불필요한 코드를 줄이고, 가독성을 높임
(매개변수목록) -> {함수몸체}
Runnable runnable = new Runnable(){
@Override
public void run(){
System.out.println("Hello world !");
}
};
Runnable runnable = () -> System.out.println("Hello world two!");
int min(int x, int y) {
return x < y ? x : y;
}
(x, y) -> x < y ? x : y;
위의 예제처럼 메소드를 람다 표현식으로 표현하면, 클래스를 작성하고 객체를 생성하지 않아도 메소드를 사용할 수 있습니다.
그런데 자바에서는 클래스의 선언과 동시에 객체를 생성하므로, 단 하나의 객체만을 생성할 수 있는 클래스를 익명 클래스라고 합니다.
따라서 자바에서 람다 표현식은 익명 클래스와 같다고 할 수 있습니다.
익명 클래스
new Object() {
int min(int x, int y) {
return x < y ? x : y;
}
}
이러한 람다 표현식은 메소드의 매개변수로 전달될 수도 있으며, 메소드의 결괏값으로 반환될 수도 있습니다.
따라서 람다 표현식을 사용하면, 기존의 불필요한 코드를 줄여주고, 작성된 코드의 가독성을 높여줍니다.
람다 표현식(lambda expression)이란?
람다 표현식(lambda expression)이란 간단히 말해 메소드를 하나의 식으로 표현한 것입니다.
특징
- 람다식 내에서 사용되는 지역변수는 final이 붙지 않아도 상수로 간주된다.
- 람다식으로 선언된 변수명은 다른 변수명과 중복될 수 없다.
장점
- 코드를 간결하게 만들 수 있음
- 식에 개발자의 의도가 명확히 드러나 가독성이 높아짐
- 함수를 만드는 과정없이 한번에 처리할 수 있어 생산성이 높아짐
- 병렬프로그래밍이 용이
단점
- 람다를 사용하면서 만든 무명함수는 재사용이 불가능
- 디버깅이 어려움
- 람다를 남발하면 비슷한 함수가 중복 생성되어 코드가 지저분해질 수 있음
- 재귀로 만들경우에 부적합함
작성시 유의사항
1. 매개변수의 타입을 추론할 수 있는 경우에는 타입을 생략할 수 있습니다.
2. 매개변수가 하나인 경우에는 괄호(())를 생략할 수 있습니다.
3. 함수의 몸체가 하나의 명령문만으로 이루어진 경우에는 중괄호({})를 생략할 수 있습니다. (이때 세미콜론(;)은 붙이지 않음)
4. 함수의 몸체가 하나의 return 문으로만 이루어진 경우에는 중괄호({})를 생략할 수 없습니다.
5. return 문 대신 표현식을 사용할 수 있으며, 이때 반환값은 표현식의 결괏값이 됩니다. (이때 세미콜론(;)은 붙이지 않음)
연관된 글 :
참고:
[Java] 람다식(Lambda Expression)과 함수형 인터페이스(Functional Interface) - (2/5)
'개발 > Java' 카테고리의 다른 글
[Java] 멀티 스레드(multi thread) (0) | 2023.03.29 |
---|---|
[Java] 메소드 참조(method reference) (0) | 2023.03.20 |
[Java] 삼항 연산자 (0) | 2023.03.19 |
[Java] 접근 제어자 (Access Modifier)와 캡슐화(encapsulation) (0) | 2023.03.16 |
[Java] Enum (0) | 2023.02.23 |