Java8 lambda 의 활용 (기본문법)
2018. 9. 5. 11:16ㆍ99. 정리전 - IT/11. Java
참조1 : https://www.youtube.com/watch?v=Yyr451RBB6g 참조2 : https://www.youtube.com/watch?v=foC6t8dZHls
1. void형 interface의 lambda 표현
package com.donzbox._01_Void; /* * Lambda 표현식 : 여러줄의 코드를 메소드에 때려넣는 기법 (java 8~) * Lambda식 제약 : 반드시 인터페이스에는 하나의 메소드만 존재해야 함 */ interface Say { void something(); } class Person { public void greeting(final Say line) { line.something(); } } public class Application { public static void main(final String [] args) { Person person = new Person(); /* * 익명클래스란 : 1회성 자식 클래스 * Say 인터페이스 클레스를 객체화 시킬때 * 메소드 내용이 없으므로 내용을 만들어 주어야 한다. * something() 메소드를 override하여 재정의 함으로써 * Say 인터페이스 클레스의 자식클래스로 만들 수 있다. * 하지만 만들어진 자식클래스의 이름이 없으므로 익명클래스라 칭한다. */ // 01. 익명 class의 객체화 person.greeting(new Say() { @Override public void something() { System.out.println("Say yea~"); } }); // 02. Lambda person.greeting(() -> { System.out.println("Say Lambda~"); }); } }
2. return 값이 있는 interface의 lambda
package com.donzbox._02_Return; interface Say { int something(); } class Person { public void greeting(final Say line) { int num = line.something(); System.out.println(num); } } public class Application { public static void main(final String [] args) { Person person = new Person(); // 01. 익명 class의 객체화 person.greeting(new Say() { @Override public int something() { return 1; } }); // 02. Lambda person.greeting(() -> { return 2; }); } }
3. parameter가 1개인 interface의 lambda 표현
package com.donzbox._03_Parameter1; interface Say { int something(int a); } class Person { public void greeting(final Say line) { int num = line.something(3); System.out.println(num); } } public class Application { public static void main(final String [] args) { Person person = new Person(); // 01. 익명 class의 객체화 person.greeting(new Say() { @Override public int something(final int a) { return a -1; } }); // 02. Lambda person.greeting(a -> { return a -2; }); } }
4. parameter가 2개 이상인 interface의 lambda 표현
package com.donzbox._04_Parameter2;
interface Say {
int something(int a, int b);
}
class Person {
public void greeting(final Say line) {
int num = line.something(3, 4);
System.out.println(num);
}
}
public class Application {
public static void main(final String [] args) {
Person person = new Person();
// 01. 익명 class의 객체화
person.greeting(new Say() {
@Override
public int something(final int a, final int b) {
return a + b;
}
});
// 02. Lambda
person.greeting((a, b) -> {
return b - a;
});
}
}
package com.donzbox._04_Parameter2; interface Say { int something(int a, int b); } class Person { public void greeting(final Say line) { int num = line.something(3, 4); System.out.println(num); } } public class Application { public static void main(final String [] args) { Person person = new Person(); // 01. 익명 class의 객체화 person.greeting(new Say() { @Override public int something(final int a, final int b) { return a + b; } }); // 02. Lambda person.greeting((a, b) -> { return b - a; }); } }
5. interface가 2개 이상일 때 lambda 표현
package com.donzbox._05_Interface2;
interface Say {
void something(int a, int b);
}
interface Hello {
// Functional Interface : 인터페이스에 메소드가 하나밖에 없는것
void something(String a, String b);
}
class Person {
public void greeting(final Say line) {
line.something(3, 4);
}
public void greeting(final Hello line) {
line.something("3", "4");
}
}
public class Application {
public static void main(final String [] args) {
Person person = new Person();
// 01. 익명 class의 객체화
person.greeting(new Say() {
@Override
public void something(final int a, final int b) {
System.out.println(a + b);
}
});
// 02. Lambda
person.greeting((final String a, final String b) -> {
System.out.println(b + "&" + a);
});
}
}
package com.donzbox._05_Interface2; interface Say { void something(int a, int b); } interface Hello { // Functional Interface : 인터페이스에 메소드가 하나밖에 없는것 void something(String a, String b); } class Person { public void greeting(final Say line) { line.something(3, 4); } public void greeting(final Hello line) { line.something("3", "4"); } } public class Application { public static void main(final String [] args) { Person person = new Person(); // 01. 익명 class의 객체화 person.greeting(new Say() { @Override public void something(final int a, final int b) { System.out.println(a + b); } }); // 02. Lambda person.greeting((final String a, final String b) -> { System.out.println(b + "&" + a); }); } }