(1) 함수적 인터페이스1 => 반환값이 없고 매개변수도 없는 추상메서드 선언
// @ Func- 안붙으면 메서드가 여러개 가능하지만,
//붙은 경우는 함수적 메서드면 추상메서드 1개
@FunctionalInterface
public interface LambdaTestInterface1 {
public void test();
}
(2) 함수적 인터페이스2 => 반환값이 없고 매개변수는 있는 추상메서드 선언
@FunctionalInterface
interface LambdaTestInterface2{
public void test(int a);
}
(3) 함수적 인터페이스3 => 반환값도 있고 매개변수도 있는 추상메서드 선언
@FunctionalInterface
interface LambdaTestInterface3{
public int test(int a, int b);
}
☆위 인터페이스 3개 활용한 메인메서드
☆람다식을 사용하지 않았을 경우 인터페이스로도 객체 생성 가능
☆단점: 클래스가 아니기때문에 interface로 객체를 만들어서 오버라이드 계속 해줘야댐
public class T02_LambdaTest {
public static void main(String[] args) {
LambdaTestInterface1 lam1 = new LambdaTestInterface1() { //
@Override
public void test() {
System.out.println("안녕하세요");
System.out.println("익명구현 객체 방식입니다.");
}
};
lam1.test(); //메서드 호출
☆람다식으로 처리하는 방법
LambdaTestInterface1 lam2 = ()->
System.out.println("반가워요\n람다식으로 처리하는 방식입니다.");
lam2.test(); //메서드 호출
System.out.println("----------------------------------------------");
☆람다식 작성 방법
☆기본형식) (자료형 이름 매개변수명, ...) -> {실행문들;...}
반환값이 있을 경우에는 return명령을 사용한다.
예) (a,b) -> {return a+b;}
(a,b) -> return a+b;
실행문 return문만 있을 경우 return명령과 '{ }'를 생략할 수 있다.
예) (a,b) -> a+b
LambdaTestInterface2 lam3 =
(int z) ->{ // 파라미터 1개
int result = z+100;
System.out.println("result = "+result); //130
};
lam3.test(30);
---------------------------------------------------------------------
LambdaTestInterface2 lam4 =
z -> { // z가 60 (int z) -> 매개변수 1개일때 생략 가능
int result = z+300;
System.out.println("result = "+result);//360
};
lam4.test(60);
---------------------------------------------------------------------
LambdaTestInterface2 lam5 =
z -> System.out.println("result ="+ (z+500));//590
lam5.test(90);//z가 90
--------------------------------------------------------------------
LambdaTestInterface3 lam6 =
(int x, int y)->{ //(x,y)로 생략 가능
int r = x+y;
return r;
};
int k = lam6.test(20, 50);
System.out.println("k = "+ k); //70
------------------------------------------------------------------
LambdaTestInterface3 lam7 =
(x,y) -> {//(int x, int y)로 생략가능
return x+y;
};
k = lam7.test(80, 50);
System.out.println("k = "+ k); //130
------------------------------------------------------------------
LambdaTestInterface3 lam8 =
(x,y) -> x + y; // return 생략
k= lam8.test(100, 200);
System.out.println("k = "+ k);//300
---------------------------------------------------------------------
LambdaTestInterface3 lam9 =
(x,y) -> {return x >y ? x:y;}; // 삼항 연산자 x >y ? x:y; 요러캐 생략가능
k = lam9.test(100, 200);
System.out.println("k = "+ k);//200
}
}