백기선(인프런 강의)/더 자바, Java 8
메소드 래퍼런스
레알윙
2020. 7. 7. 23:47
반응형
람다가 하는 일이 기존 메소드 또는 생성자를 호출하는 거라면, 메소드 레퍼런스를 사용해서 매우 간결하게 표현할 수 있다.
메소드 참조하는 방법
스태틱 메소드 참조 |
타입::스태틱 메소드 |
특정 객체의 인스턴스 메소드 참조 |
객체 레퍼런스::인스턴스 메소드 |
임의 객체의 인스턴스 메소드 참조 |
타입::인스턴스 메소드 |
생성자 참조 |
타입::new |
- 메소드 또는 생성자의 매개변수로 람다의 입력값을 받는다.
- 리턴값 또는 생성한 객체는 람다의 리턴값이다.
참고
예제
import java.util.Arrays;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.function.UnaryOperator;
public class App {
public static void main(String[] args) {
// Greeting의 함수를 사용
UnaryOperator<String> hi = (s) -> "hi ";
UnaryOperator<String> hi2 = Greeting::hi;
System.out.println(hi.apply("하이1"));
System.out.println(hi2.apply("하이2"));
Greeting greting = new Greeting();
// hello 참조
UnaryOperator<String> hello = greting::hello;
System.out.println(hello.apply("헬로ㄸ@"));
// 파라미터 있는 생성자
Function<String, Greeting> jinSeokGreeting = Greeting::new;
Greeting jinSeok = jinSeokGreeting.apply("JinSeok");
System.out.println(jinSeok.getName());
// 파라미터 없는 생성자 참조
Supplier<Greeting> newGreeting = Greeting::new;
//임의 객체의 인스턴스 메소드 참조(불특정 다수)
String[] names = {"JinSeok", "JinSeok2", "Handsome"};
// Arrays.sort(names, new Comparator<String>() {
// @Override
// public int compare(String o1, String o2) {
// 여기서 두개의 값을 비교하여 return(음수, 0, 양수)
// return 0;
// }
// });
Arrays.sort(names, String::compareToIgnoreCase);
System.out.println(Arrays.toString(names));
}
}
반응형