Java8 lambda 의 활용 (기본문법)

2018. 9. 5. 11:1699. 정리전 - 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;
		});
	}
}

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);
		});
	}
}