본문 바로가기

# 02/Java

[윤성우 열혈자바] 26-2. 람다의 소개

반응형

람다의 이해 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) { . . . }



반응형