람다가 하는 일이 기존 메소드 또는 생성자를 호출하는 거라면, 메소드 레퍼런스를 사용해서 매우 간결하게 표현할 수 있다.

스크린샷 2022-08-25 오후 10.30.47.png

public class Greeting {
    private String name;

    public Greeting() {}

    public Greeting(String name) {
        this.name = name;
    }

    public String hello(String name) {
        return "hello " + name;
    }

		public static String hi(String name) {
        return "hi " + name;
    }
}

...

public static void main(String[] args) {
    UnaryOperator<String> hi = Greeting::hi;
    String hiWooksang = hi("Wooksang");

    Greeting greeting = new Greeting();
    UnaryOperator<String> hello = greeting::hello;
    String helloWookang = hello.apply("Wooksang");

    Supplier<Greeting> supplier = Greeting::new;
    Greeting greetingInstance = supplier.get();

    Function<String, Greeting> function = Greeting::new;
    Greeting greetingInstance2 = function.apply("Wooksang");

    String[] names = {"Wooksang", "today8934", "RyuWooksang"};
    Arrays.sort(names, String::compareToIgnoreCase);
}

메소드 참조하는 방법