- 함수형 인터페이스로 한정되어 사용할 수 있는 표현식.
- 매서드 반환 타입, 메서드 이름 생략
- 매개변수 타입 생략
- 리턴문이 한줄만 있을 경우 중괄호와 리턴 생략, 단 ;는 붙여야 함.
int add(int x, int y){
return x + y;
}
// 위의 메서드를 람다 표현식을 이용해 아래와 같이 단축 시킬 수 있다. (메서드 반환 타입, 메서드 명 생략)
(int x, int y) -> {
return x + y;
};
//매개변수 타입도 생략할 수 있다.
(x, y) -> {
return x + y;
};
//함수에 리턴문 한줄만 있을 경우 더욱 더 단축 시킬 수 있다. (중괄호, return 생략)
(x, y) -> x + y;
- 함수형 인터페이스란?
- 딱 하나의 추상 메소드가 선언된 인터페이스. 단, final 상수나 default, static, private 메서드는 추상 메서드가 아니기 때문에, 이들 여러개가 인터페이스에 들어있어도 오로지 추상메서드가 한개이면 함수형 인터페이스로 취급됨.
// 함수형 인터페이스가 될 수 있다.
interface IAdd {
int add(int x, int y);
}
// 함수형 인터페이스가 될수 없다.
interface ICalculate {
int add(int x, int y);
int min(int x, int y);
}
// 구성요소가 많아도 결국 추상 메서드는 한개이기 때문에 함수형 인터페이스이다.
interface IAdd {
int add(int x, int y);
final boolean isNumber = true; // final 상수
default void print() {}; // 디폴트 메서드
static void print2() {}; // static 메서드
}
- 람다식 매개변수 할당
- 기존의 메서드 활용은 클래스를 new로 불러와서 클래스.메서드() 형태로 사용하였지만, 메서드도 일반 데이터처럼 메모리 주소가 할당 되어 있으며 이를 활용하여 메서드의 주소를 매개변수에 넣어 활용할 수 있다.
interface IAdd {
int add(int x, int y);
}
public class Main {
public static void main(String[] args) {
int n = result( (x, y) -> x + y ); // 메소드의 매개변수에 람다식을 전달
System.out.println(n); // 3
}
public static int result(IAdd lambda) {
return lambda.add(1,2);
}
}
- 람다함수 자체 리턴도 가능
- 예제
interface IAdd {
int add(int x, int y);
}
public class Main {
public static void main(String[] args) {
IAdd func = makeFunction(); // 메소드의 반환값이 람다 함수
int result = func.add(1, 2);
System.out.println(result); // 3
}
public static IAdd makeFunction() {
return (x, y) -> x + y;
}
출처: https://inpa.tistory.com/entry/☕-Lambda-Expression [Inpa Dev 👨💻:티스토리]
참고 : https://inpa.tistory.com/entry/☕-Lambda-Expression
'Java' 카테고리의 다른 글
구독 시스템 - 결제 주기와 구독 서비스 로직 (1) | 2024.11.22 |
---|---|
구독 시스템 - 구독 상태 및 Entity 설계 (1) | 2024.11.20 |
Builder 패턴 (0) | 2024.07.22 |
메서드 체이닝 (0) | 2023.10.25 |