2018-6-10 람다와 익명클래스
익명클래스
익명클래스의 형태로 정의하면, 클래스의 정의와 인스턴스의 생성을 하나로 묶을 수 있다.
public Printable getPrinter() {
return new Printable() { // 익명 클래스의 정의와 인스턴스 생성
public void print() {
System.out.println(con);
}
}
}
package yoon;
interface Printable3 {
void print();
}
class Papers3 {
private String con;
public Papers3(String con) {
this.con = con;
}
public Printable3 getPrinter() {
return new Printable3() {
public void print() {
System.out.println(con);
}
};
}
}
public class UseAnonymousInner {
public static void main(String[] args) {
Papers3 p = new Papers3("서류 내용 : 익명클래스 테스트");
Printable3 prn = p.getPrinter();
prn.print();
}
}
//result
서류 내용 : 익명클래스 테스트
람다
package yoon;
interface Printable4 {
void print(String s);
}
class Printer4 implements Printable4 {
public void print(String s) {
System.out.println(s);
}
}
public class Lambda1 {
public static void main(String[] args) {
Printable4 prn = new Printer4();
prn.print("What is Lambda?");
}
}
//result
What is Lambda?
- 여기서는 Printable4과 이를 구현하는 클래스 Printer4의 정의가 핵심이다. 익명클래스를 사용하면 아래와 같이 정의가 된다.
interface Printable5 {
void print(String s);
}
public class Lambda3 {
public static void main(String[] args) {
Printable5 prn = (s) -> { System.out.println(s); };
prn.print("What is Lambda?");
}
}
//result
What is Lambda?
- Printable5 prn = (s) -> { System.out.println(s); }; 이 문장이 바로 람다식이다.
- 람다와 익명클래스는 다르다. 하지만 둘 다 인스턴스의 생성으로 이어진다.
람다식의 인자 전달
package yoon;
interface Printable6 {
void print(String s);
}
public class Lambda4 {
public static void ShowString(Printable6 p, String s) {
p.print(s);
}
public static void main(String[] args) {
ShowString((s) -> { System.out.println(s); }, "What is Lambda?");
}
}
//result
What is Lambda?
Written on June 10, 2018