학습할 것 (필수)

람다식 사용법

함수/메소드를 간단한 식으로 표현하는 방법. 메소드를 람다식으로 표현하면 메소드의 이름과 반환값이 없어져서 익명함수라고도 부른다. (함수와 메소드는 근본적으로 동일한 것이지만 메소드는 클래스에 종속되는 반면 함수는 클래스에 독립적이다.)

함수형 인터페이스

함수형 프로그래밍에서는 함수를 변수처럼 쓸 수 있다고 한다. 이를 사용하기 위해서는 함수를 답은 인터페이스를 지정해주어야 한다.

@FuntionalInterface
interface Func {
  public abstract int add(int a, int b);
}

public static void main(String[] args) {

    Func f = new Func() {
      public int add(int a, int b) {
          return a + b;
        }
    } // 람다식을 쓰지 않고 풀어서 쓴 것

    Func f = (a, b) -> a + b; // 새로 생성한 Func f 객체에 람다식으로 오버라이딩.

}

Variable Capture

메소드, 생성자 레퍼런스

메서드 레퍼런스

람다식이 하나의 메서드만 호출하는 경우, 메서드 레퍼런스를 이용할 수 있다.

Function<String, Integer> f = s -> Integer.parseInt(s);

Function<String, Integer> f2 = Integer::parseInt;

클래스 이름을 사용하는 대신 인스턴스의 참조변수를 적어줄 수 있는 경우도 있다. 이는 이미 생성된 객체의 메서드를 람다식에서 사용하는 경우, 외부에 존재하는 인스턴스의 참조변수를 통해서 메서드 레퍼런스를 사용할 수 있다.

MyClasss obj = new MyClass();
Function<String, Boolean> f = (x) -> obj.equals(x);
Function<String, Boolean> f2 = obj::equals;