2024.06.05. WED <D + 16> , Lambda
A. Lambda , 람다
A-1. 람다의 장점
1. 간결하고 이해가 쉬움
2. 람다식 자체로 메소드의 역할을 대신함.
3. 메소드의 매개변수로 람다식을 사용할 수 있음.
A-2. 코드상의 람다.
기존 코드)
int method() {
return (int)(Math.random() * 5) + 1 + i;
}
람다를 사용한 코드)
(int i) - (int)(Math.random() * 5) + 1 + i;
A-3. 다양한 람다식의 형태
- 1. 기존 메소드 형태
int max(int a, int b) {
return a > b ? a : b; // 기존 형
}
- 람다식 형태
(int a, int b) -> {return a > b? a : b;} //return
(int a, int b) -> a > b ? a : b // 3항식으로 식임. ; <- 제거
(a, b) -> a > b ? a : b;
- 2. 기존 메소드 형태
void printVar(String name, int i) {
System.out.println(name + "=" + i);
}
- 람다식 형태
( String name, int i) -> {System.out.println(name + "=" + i);}
(name, i) -> System.out.println(name + "=" + i)
- 3. 기존 메소드 형태
int square(int x) {
return x * x;
}
- 람다식 형태
(int x) -> {return x * x;}
x -> x * x
- 4. 기존 메소드 형태
int roll() {
return (int)(Math.random)*6);
}
- 람다식 형태
() -> {return (int)(Math.random() * 6);}
() -> (int)(Math.random() * 6)
- 5. 기존 메소드 형태
int sumArr (int[] arr) {
int sum = 0;
for(int i : arr){
sum += i;
}
return sum;
}
- 람다식 형태
(int[] arr) -> {int sum = 0;
for(int i : arr)
sum +=i ;
return sum;}
@FunctionalInterface
interface MyFunc {
public abstract void run();
}
public class LambdaEx1 {
// 메인에서 사용해야 하니 static으로 작성,
// 함수형 인터페이스를 매개변수로 활용하는 메소드 생성하기.
static void execute(MyFunc f) {
f.run();
}
// 함수형 인터페이스를 반환형으로 하는 메소드 생성하기
static MyFunc getMyFunc() {
MyFunc f = () -> System.out.println("f3.run()");
return f;
}
public static void main(String[] args) {
// case 1. 함수형 인터페이스로 람다식 선언하기.
MyFunc f1 = () -> System.out.println("f3.run()");
//case2. 익명클래스 형태의 함수형 인터페이스 구현하기
MyFunc f2 = new MyFunc() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("f2.run");
}
};
// case3. getMyFunc() 사용하기
MyFunc f3 = getMyFunc();
// case4. 매개변수 execute() 사용하기.
// case4.1 . 함수형 인터페이스를 매개변수로 전달하는 방법
execute(f1);
// case4.2 . 함수형 인터페이스 없이 직접 람다식으로 전달하는 방법
execute(() -> System.out.println("run"));
f1.run();
f2.run();
f3.run();
}
}