Programming/Java

[Java] - 5. 메소드 레퍼런스

rw- 2023. 4. 1. 17:59
728x90

5. 메소드 레퍼런스

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

메소드 참조하는 방법

스태틱 메소드 참조 타입::스태틱 메소
특정 객체의 인스턴스 메소드 참조 객체 레퍼런스::인스턴스 메소드
임의 객체의 인스턴스 메소드 참조 타입::인스턴 메소드
생성자 참조 타입:new
  • 메소드 또는 생서앚의 매개변수로 람다의 입력값을 받는다.
  • 리턴값 또는 생성한 객체는 람다의 리턴값이다.

 

public class Greeting {
  private String name;

  public Greeting() {

  }

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

  public String getName() {
    return name;
  }

  public String hello(String name) {
    return "hello " + name;
  }

  public static String hi(String name) {
    return "hi " + name;
  }

}

 

import java.util.Arrays;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.function.UnaryOperator;

public class App1 {

  public static void main(String[] args) {
    UnaryOperator<String> hi = Greeting::hi;
    System.out.println("hi: " + hi.apply("young"));

    // 인스턴스의 매서드를 사용
    Greeting greeting = new Greeting();
    UnaryOperator<String> hello = greeting::hello;
    System.out.println("hello: " + hello.apply("young"));

    //입력 값은 없는데 결과 값은 있는것
    Supplier<Greeting> newGreeting = Greeting::new;
    System.out.println("newGreeting.get(): " + newGreeting.get());

    Function<String, Greeting> youngGreeting = Greeting::new;
    Greeting young = youngGreeting.apply("young");
    System.out.println("youngGreeting.apply(\"young\"): " + young);
    System.out.println("young.getName(): " + young.getName());

    // 임의 객체의 인스턴스 메소드 참조
    String[] names = {"young", "whiteship", "toby"};
    //Arrays.sort(names, (o1, o2) -> 0);
    Arrays.sort(names, String::compareToIgnoreCase);
    System.out.println(Arrays.toString(names));
  }
}
hi: hi young
hello: hello young
newGreeting.get(): me.whiteship.java8to11.Greeting@7cca494b
youngGreeting.apply("young"): me.whiteship.java8to11.Greeting@3b9a45b3
young.getName(): young
[toby, whiteship, young]

참고

https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html

728x90
반응형