인터페이스의 메소드를 클래스에서 구현 후 인터페이스 타입의 변수에 할당해 사용하는 방식이었다.
바로 람다식으로 인터페이스의 메소드를 구현해서 그것을 인터페이스 변수에 할당해 이용하는 방식이다.
인터페이스 LambdaInterface1
public interface LambdaInterface1 {
public void method(String s1, String s2, String s3);
}
위에 정의된 인터페이스 안의 메소드를 클래스에서 일일이 재정의해서 구현하는 것이 아닌,
인터페이스에 선언된 메소드를 람다식으로 바로 재정의해서 구현하면 된다.
// main 함수
// 람다식으로 매개변수 3개를 던지는 부분만 구채화 시킴
LambdaInterface1 li1 = (String s1, String s2, String s3) -> {System.out.println(s1 + " " + s2 + " " + s3); };
li1.method("Hello", "java", "world");
(매개변수목록) -> { 함수몸체 }
또, 람다식을 사용할 때는 람다식을 저장하기 위한 참조 변수의 타입을 결정해야 한다. 그 형식은 아래와 같다.
인터페이스타입 인터페이스변수 = (매개변수목록) -> { 함수몸체 } ;
1번 예제
매개변수가 1개이거나 타입이 같을 때, 타입을 생략할 수 있다.
public interface LambdaInerface2{
public void method(String s1);
}
LambdaInterface2 li2 = (s1) -> {System.out.println(s1); };
li2.method("hello");
2번 예제
실행문이 1개일 때, { } 를 생략할 수 있다.
LambdaInterface2 li3 = (s1) -> System.out.println(s1);
li3.method("hello");
3번 예제
매개변수와 실행문이 1개일때, { } 와 ( ) 를 생략할 수 있다.
LambdaInterface2 li4 = s1 -> System.out.println(s1);
li4.method("Hello");
4번 예제
매개변수가 없을 때, ( ) 만 작성한다.
public interface LambdaInterface3{
public void method();
}
LambdaInterface li5 = () -> System.out.println("no paramenter");
li5.method();
5번 예제
반환형이 있는 경우
public interface LambdaInterface4{
public int method(int x, int y);
}
// 반환형이 있는 형태로 구현
LambdaInterface4 li6 = (x,y) -> {
int result = x + y;
return result;
};
System.out.println("li6.method(10,20): %d\n", li6.method(10,20)); // 30
// 변수에 담고있는 함수 변경
li6 = (x,y) -> {
int result = x * y;
return result;
};
System.out.println("li6.method(10,20): %d\n", li6.method(10,20)); // 200
// 변수에 담고있는 함수 변경
li6 = (x,y) -> {
int result = x - y;
return result;
}
System.out.println("li6.method(10,20): %d\n", li6.method(10,20)); // -10