람다식(Lambda Expression)

  • 람다식은 매개변수를 가지는 코드블럭
  • 객체지향 프로그램에 함수적 프로그래밍을 도입
  • 이벤트 지향 프로그램에 적합
  • 자바 코드가 간결해짐
  • JVM이 런타임 시에 매개변수를 가지는 코드블럭을 익명객체로 전환
  • 함수와 메서드 차이
    • 근본적으로 동일. 함수는 일반적 용어, 메서드는 객체지향개념 용어
    • 함수는 클래스에 독립적, 메서는 클래스에 종속적

1. 함수(메서드)를 간단한 식(Expression)으로 표현하는 방법

int max(int a, int b){
    return a > b ? a : b;
}

///Lambda
(a, b) -> a > b ? a : b

2. 익명 함수(이름이 없는 함수, annoymous function)

int max(int a, int b){
    return a > b ? a : b;
}

///Lambda
(int a, int b) ->{
  return a > b ? a : b;
}

3. 매개변수가 하나인 경우, 괄호 생략 가능(타입이 없을 때만)

a -> a * a 			//ok
int a -> a * a		// Error

4. 블록 안의 문장이 하나인 경우 return 생략 가능

  • 단 하나의 문장이 return 인 경우 괄호 사용
// Lambda 예제
@FunctionalInterface
interface MyFunction{
	void run();
}

public class LambdaEx {
	static void execute(MyFunction f) {
		f.run();
	}

	static MyFunction getMyFunction() {
		MyFunction f = () -> System.out.println("f3.run(");
		return f;
	}

	public static void main(String[] args) {
        // Lambda로 구현
		MyFunction f1 = () -> System.out.println("f1.run()");
		MyFunction f2 = new MyFunction() {
			public void run() {
				System.out.println("f2.run()");
			}
		};

		MyFunction f3 = getMyFunction();

		f1.run();
		f2.run();
		f3.run();

		execute(f1);
		execute( ()-> System.out.println("run()"));
	}
}