# Table of Contents

# 메소드 참조, 생성자 참조

Java 8 부터 메소드 참조, 생성자 참조를 사용할 수 있다.

# 메소드 참조

메소드 참조(Method Reference)을 사용하면 람다식이 오직 하나의 메소드만을 호출하는 경우 람다식, 람다식의 매개변수를 생략하고 ::을 사용하여 간단하게 표현할 수 있다.

예제를 살펴보자. 다음과 같은 함수형 인터페이스가 있다.

@FunctionalInterface
interface Lambda {
    void run(String something);
}

이제 함수형 인터페이스 타입의 변수에 람다식을 할당한다.

 


Lambda lambda = (something) -> System.out.println(something);
lambda.run("Hello World");

위 코드는 람다식이 단 하나의 메소드 System.out.println(something)만을 호출하고 있다. 이처럼 람다식이 하나의 메소드만을 호출하는 경우 메소드 참조를 사용하여 다음과 같이 단축할 수 있다.

 


Lambda lambda = System.out::println;
lambda.run("Hello World");

즉, 두 구문은 동일하다.

(something) -> System.out.println(something)
System.out::println

메소드 참조는 다음과 같은 형태로 사용한다.

  • 클래스이름::메소드이름
  • 참조변수이름::메소드이름

# 생성자 참조

생성자를 호출하는 람다식도 메소드 참조 예제처럼 단축할 수 있다.

다음 예제를 보자

@FunctionalInterface
interface Lambda {
    Person run(String str);
}
 


Lambda lambda = (str) ->  new Person(str);
Person p = lambda.run("Paul");

생성자 참조를 사용하면 다음과 같이 단축할 수 있다.

 


Lambda lambda = Person::new;
Person p = lambda.run("Paul");