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을 공부하며 어느정도 이해가 되었다.