Java

람다 메소드 레퍼런스

혀눅짱 2023. 4. 13. 14:34

람다가 하는 일이 기존 메소드 또는 생성자를 호출하는 거라면, 메소드 레퍼런스를 사용해서

매우 간결하게 표현할 수 있다. 메소드 참조하는 방법

스태틱 메소드 참조   -> 타입::스태틱 메소드
특정 객체의 인스턴스 메소드 참조 -> 객체 레퍼런스::인스턴스 메소드

임의 객체의 인스턴스 메소드 참조 ->  타입::인스턴스 메소드

생성자 참조 ->  타입::new

  • ●  메소드 또는 생성자의 매개변수로 람다의 입력값을 받는다.
  • ●  리턴값 또는 생성한 객체는 람다의 리턴값이다.

 

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 class MainClass {

    public static void main(String[] args) {
       

        UnaryOperator<String> test = (s) -> "hi" + s;
        UnaryOperator<String> hi = Greeting::hi ;
        System.out.println(test.apply("test"));
        System.out.println(hi.apply("test"));

        }
    }

test 의 구현체로 문자열 hi에 아규먼트 문자열을 합친 결과를 리턴하도록 구현했다.

이 로직은 Greeting에 static 메소드인 hi와 똑같은 구현을 하기 때문에

구현체자체로 메소드를 참조하여 똑같은 결과가 나타나는 것을 볼 수있다.

 

Function<String,Greeting> newGreeting2 = Greeting::new;
Greeting test1 = newGreeting2.apply("test");
System.out.println(test1.getName());

또한 인스턴스역시 생성자를 참조하여 생성할수도 있다

메소드레퍼런스의 경우 jpa강의를 들을때 심심치 않게 봤던 문법인데 사실 잘 모르고 그냥 넘어갔었는데

이번 자바8을 공부하며 어느정도 이해가 되었다.