JaPark Bug World
[JAVA] 함수형 인터페이스와 람다 - 메소드 레퍼런스 본문
메소드 레퍼런스
람다가 하는 일이 기존 메소드 또는 생성자를 호출하는 거라면, 메소드 레퍼런스를 사용해서 매우 간결하게 표현할 수 있다.
메소드 참조하는 방법
스태틱 메소드 참조 | 타입::스태틱 메소드 |
특정 객체의 인스턴스 메소드 참조 | 객체 페퍼런스::인스턴스 메소드 |
임의 객체의 인스턴스 메소드 참조 | 타입::인스턴스 메소드 |
생성자 참조 | 타입::new |
- 메소드 또는 생성자의 매개변수로 람다의 입력값을 받는다.
- 리턴값 또는 생성한 객체는 람다의 리턴값이다.
이해를 돕기 위해 만들어 둔 Greeting Class
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 String getName() {
return name;
}
}
스태틱 메소드 참조
UnaryOperator<String> hi = Greeting::hi; // 해당 문법만 가지고는 아무일도 일어나지 않음.
hi.apply("jp"); // apply 까지 해줘야 함.
// 기존 방식
Greeting.hi("jp");
특정 객체의 인스턴스 참조
UnaryOperator<String> hello = greeting::hello;
hello.apply("jp");
// 기존방식
Greeting greeting = new Greeting();
greeting.hello("jp");
임의 객체의 인스턴스 메소드 참조
String[] names = {"jp", "park", "jing"};
Arrays.sort(names, String::compareToIgnoreCase);
System.out.println(Arrays.toString(names));
// 결과값 : [jing, jp, park]
String::compareToignoreCase 이 내용인것 같은데.. 이해가 잘 안된다........
매개변수가 없는 생성자 참조
Supplier<Greeting> newGreeting = Greeting::new;
newGreeting.get();
// 기존 방식
Greeting newGreeting = new Greeting();
매개변수가 있는 생성자 참조
Function<String, Greeting> jpGreeting = Greeting::new;
Greeting jp = jpGreeting.apply("jp");
jp.getName();
// 기존 방식
Greeting newGreeting = new Greeting("jp");
newGreeting.getName();
예제가 간단해서 그런지 람다식이 더 간결하다는게 아직 체감이 되지 않는다.. 많이 써봐야겠다....
인프런 더 자바, Java8 백기선님 강의를 참고하여 정리한 내용입니다.
'개발새발 > 더 자바, Java 8' 카테고리의 다른 글
[JAVA] 함수형 인터페이스와 람다 - 람다 표현식 (0) | 2024.03.31 |
---|---|
[JAVA] 함수형 인터페이스와 람다 - 자바에서 제공하는 함수형 인터페이스 (0) | 2024.03.29 |
[JAVA] 함수형 인터페이스와 람다 - 함수형 인터페이스와 람다 표현식 소개 (0) | 2024.03.29 |