package day8;
@FunctionalInterface
interface Math{
public int calc(int first, int second);
//public double calc2(double f, double s); > 람다식에 인터페이스는 하나만 허용.
}
@FunctionalInterface
interface C{
public int calc(int first, int second);
}
@FunctionalInterface
interface A{
int ma();
}
@FunctionalInterface
interface B{
int mb(int i);
}
class C1{
static int mc1(int i, int j) { return i / j; }
int mc2(int i, int j) {return i % j;}
}
public class FunctionalTest {
String name = "멤버변수";
public static void main(String[] args) {
String name = "메인지역변수";
C m = (a, b) -> a * b;
System.out.println(m.calc(10, 2));
//람다식
/* Math m2 = (first, second) ->first - second;
System.out.println(m2.calc(10, 2));
Math m3 = (i, j) -> i + j;
System.out.println(m.calc(10, 2));
Math m4 = (i, j) -> i / j;
System.out.println(m.calc(10, 2));
*/
//Math m5 = (i, j) -> C1.mc1(i, j); // 람다식의 매개변수를 외부클래스 메소드에 매개변수 전달하고
Math m5 = C1::mc1; //위와 같음 , 클래스명::static매소드명
//외부클래스 메소드가 실행한 결과 리턴
System.out.println(m5.calc(10, 2));//5
// Math m6 = (i, j) -> new C1().mc2(i, j);
Math m6 = new C1()::mc2; // non-static메소드 사용 방법
System.out.println(m6.calc(10, 20));
/* A a1 = () -> 1;
System.out.println(a1.ma());
B b1 = (a) -> {
String name2 = "람다";
System.out.println(name);
System.out.println("람다식 실행"); // 람다식을 포함하고 있는 지역변수 사용 가능
// static변수 --> 클래스명.static변수명
// non-static변수 --> new 클래스명().non-static변
System.out.println(new FunctionalTest().name);
return a*a;
};
System.out.println(b1.mb(10));
*/
}
}