다음과 같은 익명 클래스로 짠 코드가 있다고 가정하자.
interface Printable {
void print(String s);
}
class Lambda {
public static void main(String[] args) {
Printable prn = new Printable() { // 익명 클래스
public void print(String s)
{
System.out.println(s);
}
}
prn.print("What is Lambda");
}
}
이는 람다로 다음과 같이 나타낼 수 있다.
interface Printable {
void print(String s);
}
class Lambda {
public static void main(String[] args) {
Printable prn = (s)-> {System.out.println(s)};
prn.print("What is Lambda");
}
}
이 코드의 의미는 Printable 인터페이스가 인스턴스를 생성하지 못 하는 이유는 print메소드의 구현 뿐이기 때문에
그 print메소드를
public void print(String s)
{
System.out.println(s);
}
이렇게 구현하고 그렇게 구현한 클래스에서 인스턴스를 생성하여 Printable 참조변수가 그 인스턴스를 참조하게 하겠다는 의미를 지닌다.
이 때 s가 String형임은 Printable 인터페이스를 통해 컴파일러가 유추할 수 있으므로 자료형을 생략해줄 수 있다.
이제 우리는 익명클래스에 빗대어 람다식을 이해하였다.
하지만 늘 익명클래스를 떠올리며 람다식을 이해하려고 하면 코드를 이해하는 속도가 느려지기 때문에 좀더 직관적으로 받아들여보자.
Printable prn = (s) -> {System.out.println(s)};
이제 이 코드의 오른쪽은 Printable 인터페이스의 구현이라고 바로 받아들이자.
람다식으로 인자 전달도 가능하다.
method((s) -> System.out.println(s)); // void method(Printable prn) {...}
'언어 > Java' 카테고리의 다른 글
정의되어 있는 함수형 인터페이스 (0) | 2023.02.07 |
---|---|
람다와 함수형 인터페이스 (0) | 2023.02.07 |
네스티드(Nested) 클래스와 이너(Inner) 클래스 (0) | 2023.02.03 |
매개변수의 가변 인자 선언 (0) | 2023.02.03 |
열거형 (0) | 2023.02.03 |