1. 람다 표현식: lambda-expression
- Java8 부터 도입:
(매개변수 리스트) -> 리턴값
(매개변수 리스트) -> {...} 수행코드
- 추상메소드가 하나인 인터페이스 구현, 즉 익명클래스사용 더 간략화한 표현식
package com.lec.java.lambda01;
public class Lambda01Main {
public static void main(String[] args) {
System.out.println("인터페이스, 익명 클래스, 람다 표현식");
System.out.println();
System.out.println("[1] 인터페이스를 구현하는 클래스");
Addable myAdder = new AdderImple();
double result = myAdder.add(1.11, 2.22);
System.out.println("result = " + result);
System.out.println();
System.out.println("[2] 익명 클래스 사용");
Addable myAdder2 = new Addable() {
@Override
public double add(double x, double y) {
return x + y;
}
};
result = myAdder2.add(1.11, 2.22);
System.out.println("result = " + result);
System.out.println();
System.out.println("[3] 람다 표현식(lambda expression) 사용");
Addable myAdder3 = (a, b) -> a + b;
result = myAdder3.add(1.11, 2.22);
System.out.println("result = " + result);
System.out.println("\n프로그램 종료");
}
}
interface Addable {
public abstract double add(double x, double y);
}
class AdderImple implements Addable {
@Override
public double add(double x, double y) {
return x + y;
}
}
- 람다 표현식 (lambda - expression):
() -> 수행코드
() -> 리턴값
(매개변수..) -> 수행코드
(매개변수..) -> 리턴값
- 매개변수의 타입은 생략해서 표현이 가능
- 매개변수가 여러개 있을 경우, 모든 매개변수의 타입을 생략해서 표현하거나, 모든 매개변수의 타입을 모두 다 표현해야 함.
package com.lec.java.lambda02;
public class Lambda02Main {
public static void main(String[] args) {
System.out.println("익명 클래스, 람다 표현식 연습");
Test01 lambda01 = () -> System.out.println("안녕하세요");
lambda01.testPrint();
Test02 lambda02 = (x) -> System.out.println("num = " + x);
lambda02.testPrint(55);
Test03 lambda03 = (x, y) -> (x > y) ? x : y;
System.out.println("result = " + lambda03.max(10, 20));
Test04 lambda04 = (x) -> {
System.out.println(x);
return x.length();
};
int result = lambda04.myStrLen("Java");
System.out.println("result = " + result);
Test05 lambda05 = (x, y) -> {
System.out.println("x = " + x);
System.out.println("y = " + y);
if(x > y) {
System.out.println(x + " > " + y);
} else {
System.out.println(x + " <= " + y);
}
};
lambda05.PrintMax(3.14, 1.2);
System.out.println("\n프로그램 종료");
}
}
package com.lec.java.lambda02;
interface Test01 {
public abstract void testPrint();
}
package com.lec.java.lambda02;
interface Test02 {
public abstract void testPrint(int num);
}
package com.lec.java.lambda02;
interface Test03 {
public abstract int max(int n1, int n2);
}
package com.lec.java.lambda02;
interface Test04 {
public abstract int myStrLen(String str);
}
package com.lec.java.lambda02;
interface Test05 {
public abstract void PrintMax (double x, double y);
}