1. Lambda Expression

자바에서 익명 함수를 간단히 표현하는 문법.

메서드를 식으로 표현한 것 이라는 표현이 흔히 사용되는 설명이지만, 엄연히 따지자면 메서드는 함수가 아니다. 자바에서 메서드는 클래스에 소속된 행동 의 주체이고 람다는 클래스에 속하지 않는 함수 를 표현할 수 있게 해주는 문법.

‘함수’ 라는 개념은 일급 객체로써 사용된다 라는것을 의미한다. 일급 객체의 사전적 정의는 다음과 같다.

  1. 모든 일급 객체는 변수나 데이터에 담을 수 있어야 한다.
  2. 모든 일급 객체는 함수의 파라미터로 전달 할 수 있어야 한다.
  3. 모든 일급 객체는 함수의 리턴값으로 사용할 수 있어야 한다.

일급 객체의 특성은 자바스크립트, 파이썬 등의 함수형 프로그래밍에서 근간이 되는 개념이다.

생각해보면, 자바에서 ‘행동’ 을 표현하는 메서드는 변수에 할당할 수 없다. 또한, 매개변수로 전달도 불가능하며 메소드 자체를 리턴하는 행위는 불가능하다.

그러나 람다 표현식은 일급 객체의 특징을 갖는다.

1. 변수나 데이터에 담을 수 있다

import java.util.function.Consumer;

public class Main {
    public static void main(String[] args) {
        Consumer<String> c = (t) -> System.out.println(t);
        c.accept("Hello World");
    }
}

2. 파라미터로 전달 할 수 있다.

import java.util.function.Consumer;

public class Main {
    public static void print(Consumer<String> c, String str) {
        c.accept(str);
    }

    public static void main(String[] args) {
        print((t) -> System.out.println(t) ,"Hello World");
    }
}

3. 리턴값으로 사용할 수 있다.

import java.util.function.Consumer;

public class Main {
    public static Consumer<String> hello() {
        return (t) -> {
            System.out.println(t);
        };
    }

    public static void main(String[] args) {
        Consumer<String> c = hello();
        c.accept("Hello World");
    }
}