[Java] 람다식(Lambda Expression)
- 📕 Programing/Java
- 2020. 12. 1.
람다식(Lambda Expression)
- 함수를 간단한 '식(expression)'으로 표한하는 방법
- 익명함수(이름이 없는 함수, anonymous function)
- 람다식은 익명함수가 아니라 익명 객체 이다.
예시
//Object obj = (a, b) -> a > b ? a: b; //람다식. 익명객체
Object obj = new Object() {
int max(int a, int b){
return a > b ? a : b;
}
};
위의 두 가지 코드는 같은 방식이다.
함수와 메서드의 차이
- 근본적으로는 동일. 함수는 일반적인 용어, 메서드는 객체지향개념 용어
- 함수는 클래스에 독립적, 메서드는 클래스에 종속적
함수형 인터페이스
- 함수형 인터페이스 : 단 하나의 추상 메서드만 선언된 인터페이스
@FunctionalInterface interface MyFunction { public abstract int max(int a, int b); }
함수형 인터페이스 타입의 참조변수로 람다식을 참조할 수 있다.
(단, 함수형 인터페이스의 메서드와 람다식의 매개변수 개수와 반환타입이 일치해야 한다.)
MyFunction f = (a,b) -> a > b ? a : b; //람다식
int value = f.max(3,5); // 실제로는 람다식(익명 함수)이 호출됨
예제
public class ex14 {
public static void main(String[] args) {
MyFunction2 f = new MyFunction2() {
@Override
public int max(int a, int b) {
return a > b ? a : b;
}
};
int value = f.max(3,5);
System.out.println("value : " + value); // value : 5
// 위의 소스들을 람다식으로 간단하게 표현할 수 있다.
MyFunction2 dd = (a,b) -> a > b ? a : b; // 람다식. 익명객체
int value2 = dd.max(10,20); //함수형 인터페이스
System.out.println("value2 : " + value2); // value2 : 20
}
}
@FunctionalInterface // 함수형 인터페이스라는것을 명시
interface MyFunction2 {
int max(int a, int b);
}
함수형 인터페이스 예제
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class ex01 {
public static void main(String[] args) {
//List<String> list = Arrays.asList("abc", "aaa", "bbb", "ddd", "aaa");
List<Integer> list = Arrays.asList(10, 15, 5, 60, 100);
Collections.sort(list, (s1, s2) -> s2.compareTo(s1)); // 내림차순
System.out.println(list); // [100, 60, 15, 10, 5]
Collections.sort(list, (s2, s1) -> s2.compareTo(s1)); // 오름차순
System.out.println(list); // [5, 10, 15, 60, 100]
}
}
'📕 Programing > Java' 카테고리의 다른 글
[Java] Arryas 기본 사용법 (1) | 2021.06.07 |
---|---|
[Java] Map 관련 Iterate(반복문) 방법 (0) | 2021.03.22 |
[Java] 람다식(Lambda Expression) 실습 (0) | 2020.07.28 |
[Java] CPU, Memory 사용량 (0) | 2020.07.23 |
JVM(Java Virtual Machine) 내부 구조 (0) | 2020.05.29 |