BackEnd/Java

Java8. 메소드 레퍼런스 (Method Reference)

hanseom 2022. 1. 20. 23:27
반응형

  메소드 레퍼런스(Method Reference)란 ::를 사용하여 축약하는 방법입니다.

 

메소드 참조 방법

  • Static Method 참조
  • 특정 객체 Instance Method 참조
  • 생성자 참조
  • 임의 객체 Instance Method 참조

  메소드 또는 생성자의 매개변수로 람다의 입력 값을 받으며, 리턴 값 또는 생성한 객체는 람다의 리턴 값입니다.

public class Hello {
  private String name;

  public Hello() {}

  public Hello(String name) { this.name = name; }

  public String print(String name) { return "Hello, " + name; }

  public String printName() { return "Hello, " + this.name; }

  public static String printJava() { return "Hello, Java!!"; }
}
import java.util.Arrays;
import java.util.Comparator;
import java.util.function.Function;
import java.util.function.Supplier;

public class MethodReference {

  public static void main(String[] args) {
    // Static Method 참조
    Supplier<String> supplier = Hello::printJava; // () -> Hello.printJava();
    System.out.println(supplier.get()); // [결과]: Hello, Java!!

    // 특정 객체의 Instance Method 참조
    Hello hello = new Hello();
    Function<String, String> function = hello::print; // s -> hello.print(s);
    System.out.println(function.apply("Java!")); // [결과]: Hello, Java!

    // 생성자 참조
    Function<String, Hello> newHello = Hello::new; // s -> new Hello(s);
    System.out.println(newHello.apply("Java").printName()); // [결과]: Hello, Java

    // 임의 객체의 Instance Method 참조
    String[] names = {"aJava","cJava","bJava"};
    Arrays.sort(names, String::compareToIgnoreCase);
    System.out.println(Arrays.toString(names)); // [결과]: [aJava, bJava, cJava]
  }

}
반응형