람다의 이해 1
interface Printable {
void print(String s);
}
class Printer implements Printable {
public void print(String s) {
System.out.println(s);
}
}
class Lambda1 {
public static void main(String[] args) {
Printable prn = new Printer();
prn.print("What is Lambda?");
}
}
-> 익명클래스로 변경
interface Printable {
void print(String s);
}
class Lambda2 {
public static void main(String[] args) {
Printable prn = new Printable() { // 익명 클래스
public void print(String s) {
System.out.println(s);
}
};
prn.print("What is Lambda?");
}
}
아직 람다 등장 안 했음!!
람다의 이해 2
interface Printable {
void print(String s);
}
class Lambda2 {
public static void main(String[] args) {
Printable prn = new Printer() {
public void print(String s) {
System.out.println(s);
}
};
prn.print("What is Lambda?");
}
}
-> 람다식으로 변경
드디어 람다 등장!!
interface Printable { // 추상 메소드가 하나인 인터페이스
void print(String s);
}
class Lambda3 {
public static void main(String[] args) {
Printable prn = (s) -> { System.out.println(s); };
prn.print("What is Lambda?");
}
}
람다의 이해 3 : 생략 가능한 것을 지워보자.
Printable prn = new Printable() {
public void print(String s) {
System.out.println(s);
}
};
interface Printable {
void print(String s);
}
prn이 Printable형 참조변수이니 = 의 왼편에는 new가 당연히 올 것이고,
메소드 정의가 온 것을 보니, 익명 클래스를 기반으로 보건대 이는 인스턴스 생성이야!
-> 변경
Printable prn = new Printable() {
public void print(String s) {
System.out.println(s);
}
};
람다의 이해 4
Printable prn =
public void print(String s) {
System.out.println(s);
};
interface Printable {
void print(String s);
}
Printable 인터페이스에 있는 메소드 그거 public void print(String s)니 뻔하지 뭐!
-> 변경
Printable prn =
public void print(String s) {
System.out.println(s);
};
람다의 이해 5
Printable prn = { System.out.println(s); };
interface Printable{
void print(String s);
}
컴파일러가 저 s가 매개변수라고 판단해 주길 바라는 것은 무리이니까!
Printable prn = (String s) -> { System.out.println(s); }; 완성된 람다식!
s가 String형 임은 Printable 인터페이스 보면 알 수 있지 않아?
Printable prn = (s) -> { System.out.println(s); }; 조금 더 줄이면!
람다식의 인자 전달
interface Printable {
void print(String s);
}
Printable prn = (s) -> { System.out.println(s); };
method( (s) -> System.out.println(s) ); // void method(Printable prn) { . . . }
'# 02 > Java' 카테고리의 다른 글
[윤성우 열혈자바] 27-2. 정의되어 있는 함수형 인터페이스 (0) | 2019.10.25 |
---|---|
[윤성우 열혈자바] 27-1. 람다와 함수형 인터페이스 (0) | 2019.10.25 |
[윤성우 열혈자바] 26-1. 네스티드 클래스와 이너 클래스 (0) | 2019.10.25 |
[윤성우 열혈자바] 25-3. 어노테이션 (0) | 2019.10.25 |
[윤성우 열혈자바] 25-2. 매개변수의 가변 인자 선언 (0) | 2019.10.25 |