반응형
메소드 레퍼런스란?
람다가 하는 일이 기존 메서드 또는 생성자를 호출하는 거라면, 메소드 레퍼런스를 사용해서 매우 간결하게 표현
즉, 람다식을 더 간결하게 표현하는 방법이 메소드 레퍼런스 이다.
메소드 참조하는 방법
스태틱 메소드 참조 | 타입::스태틱 메소드 |
특정 객체의 인스턴스 메소드 참조 | 객체 레퍼런스::인스턴스 메소드 |
임의 객체의 인스턴스 메소드 참조 | 타입::인스턴스 메소드 |
생성자 참조 | 타입::new |
- 메소드 또는 생성자의 매개변수로람다의 입력값을 받는다
- 리턴값 또는 생성한 객체는 람다의 리턴값 이다.
예제 코드
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.function.UnaryOperator;
public class App {
public static void main(String[] args) {
// 1. 입력값을 받는 생성자 호출 및 인스턴스 생성
Function<String, Greeting> hkGreeting = Greeting::new;
Greeting hello = hkGreeting.apply("hello");
System.out.println(hello.getName());
// 2. 기본 생성자 호출 및 인스턴스 생성
Supplier<Greeting> newGreeting = Greeting::new;
Greeting greeting = newGreeting.get();
// 3. instance method 참조
// Greeting greeting = new Greeting();
UnaryOperator<String> instanceMethod = greeting::hello;
System.out.println(instanceMethod.apply("hyokeun"));
// 4. static method 참조
UnaryOperator<String> staticMethod = Greeting::hi;
System.out.println(staticMethod.apply("hyokeun"));
// 5. 임의 객체의 인스턴스 메소드 참조
List<String> names = Arrays.asList("z", "b", "c", "a");
// String 에 static 한 메소드가 있는게 아니다. 임의 객체의 인스턴스 메소드를 참조하고 있는것이다.
names.sort(String::compareToIgnoreCase);
System.out.println(names.toString()); // [a, b, c, z]
}
}
참고
백기선 - 더 자바, Java8
https://www.inflearn.com/course/the-java-java8/dashboard
'Language > Java' 카테고리의 다른 글
Java8 Stream (0) | 2022.07.02 |
---|---|
인터페이스 기본 메소드와 스태틱 메소드 (0) | 2022.06.19 |
함수형 인터페이스와 람다 표현식 (0) | 2022.06.18 |
자바에서 제공하는 함수형 인터페이스 (0) | 2022.06.18 |
함수형 인터페이스와 람다 표현식 소개 (0) | 2022.06.15 |