Language/Java

메소드 레퍼런스

JUNGKEUNG 2022. 6. 18. 18:46
반응형

메소드 레퍼런스란?

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

즉, 람다식을 더 간결하게 표현하는 방법이 메소드 레퍼런스 이다.

 

 

메소드 참조하는 방법

스태틱 메소드 참조 타입::스태틱 메소드
특정 객체의 인스턴스 메소드 참조 객체 레퍼런스::인스턴스 메소드
임의 객체의 인스턴스 메소드 참조 타입::인스턴스 메소드
생성자 참조 타입::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