람다함수란?
람다 함수는 프로그래밍 언어에서 사용되는 개념으로익명 함수(Anonymous functions)를 지칭하는 용어이다
함수형 프로그래밍 기법을 지원하는 자바의 문법 요소이다. 객체지향보다는 함수지향 기법에 가깝다. 메서드를 수식(expression)과 같이 표현한다.
익명함수?
이름이 없는 함수이다. 메서드의 반환타입이나 이름을 생략하여 사용한다. 익명함수는 다른 객체들에 일반적으로 적용가능한 모든 연산을 지원한다.
이는 익명함수가 일급객체(First-class Object)이기 때문이다.
장점
- 코드가 간결해진다.
- 지연연산을 통해 불필요한을 연산 최소화한다.
- 멀티스레드를 활용해 병렬처리를 할 수 있다.
단점
- 재사용이 불가능하다.
- 필요 이상으로 남용하게 되면 가독성이 떨어질 수 있다.
- 람다 stream 사용에 있어 단순 반복문의 성능이 떨어질 수 있다.
- 디버깅 시 함수 콜 스택 추적이 어려운 편이다.
표현식
- 화살표를 이용해 직관적인 코드 작성
- 반환타입 및 함수명을 생략할 수 있다.
- 조건이 충족될 경우에는 추가적으로 생략이 가능한 부분도 있다.
- 메서드 바디에 실행문이 하나만 존재하는 경우, 중괄호, return, 세미콜론 생략
- 함수형 인터페이스를 통해 파라미터 타입을 유추할 수 있는 경우, 파라미터 타입 생략
- 파라미터가 하나인 경우, 소괄호 생략 등
예제코드
코드1
//기존 방식1
void sayhello() {
System.out.println("HELLO!")
}
//람다식1
() -> System.out.println("HELLO!")
코드2
//기존 방식2
int sum(int num1, int num2) {
return num1 + num2;
}
//람다식2
(int num1, int num2) -> { // 반환타입과 메서드명 제거 + 화살표 추가
return num1 + num2;
}
//더 생략 가능 (메서드 바디에 실행문이 하나만 존재하는 경우)
(int num1, int num2) -> num1 + num2
//더더 생략 가능 (함수형 인터페이스를 통해 파라미터 타입을 추측할 수 있는 경우)
(num1, num2) -> num1 + num2
코드3
// 기존 방식3
void example1() {
System.out.println(5);
}
// 람다식3
() -> {System.out.println(5);}
코드4
// 기존 방식4
int example2() {
return 10;
}
// 람다식4
() -> {return 10;}
코드5
// 기존 방식5
void example3(String str) {
System.out.println(str);
}
// 람다식5
(String str) -> { System.out.println(str);}
'JAVA' 카테고리의 다른 글
[JAVA] Stream(2) 중간연산 (0) | 2023.07.17 |
---|---|
[JAVA] Stream(1) Stream 생성하기 (0) | 2023.07.17 |
[JAVA] Annotation (0) | 2023.07.14 |
[JAVA] Map을 순회하는 방법 (0) | 2023.07.14 |
[JAVA] 예외처리 (0) | 2023.07.14 |