유블로그

[Java] Lambda 본문

Java

[Java] Lambda

yujeong kang 2020. 8. 13. 15:14
  • Lambda는 java 8부터 추가됨.
  • method 가 하나 뿐인 인터페이스를 단순하게 표현하는데 좋다.
  • @FunctionalInterface 은 해당 Interface가 한 개의 abstaract method를 가지고 있다는 의미
  • Thread 에서 사용되는 Runnable, PriorityQueue 의 Comparable, Collections.sort()의 Comparator 모두 FuntionalInterface의 예이다.
(p1, p2) -> { statements; } 기본  
p1 -> { statements; } parameter 한개 () 생략
(p1, p2) -> statements statement 한개 {} 생략
() -> { statements; } no parameter () 필수
p1 -> { return ... ; } return  

 

interface A {
	void a();
}
interface B {
	void call(int v);
}
interface C {
	String call(int cnt, String word);
}

public class test04 {
	private static void test(C c) {
		System.out.println(c.call(123, "안녕~!~!~!~!~!"));
	}
	
	public static void main(String[] args) {
		{
			// 람다 이용
			test((cnt, word) -> word + cnt);

			// 익명 클래스 이용
			test(new C() {
				@Override
				public String call(int cnt, String word) {
					return word + cnt;
				}
			});
		}
		{
			C c = (cnt, word) -> {	return cnt + word;	};
			System.out.println(c.call(3, "안녕!"));
		}
		{
			C c = (cnt, word) -> cnt + word ;
			System.out.println(c.call(1, "안녕!"));
		}
		{	
			A a = new A() {
				@Override
				public void a() {
					System.out.println("hello");
				}
			};
			a.a();
		}
		{
	//		A a = () -> {	// 메서드 내용이 두 줄 이상이면  {} 로 묶는다.
	//						System.out.println("안녕~!");
	//						System.out.println("안녕~!!!!");
	//					};
			A a = () -> System.out.println("안녕~!");
	
			a.a();
		}
		
		{
			B b = new B() {
				@Override
				public void call(int v) {
					System.out.println(v);
				}
			};
			b.call(1);
		}
		{
			B b = v -> System.out.println(v);
			b.call(2);
		}
	
	
	}
}

'Java' 카테고리의 다른 글

[Java] Thread  (0) 2020.08.18
[Java] Concurrent vs Parallel  (0) 2020.08.18
[Java] XML  (0) 2020.08.13
[Java] Java IO  (0) 2020.08.13
[Java] 내부 클래스  (0) 2020.08.12