[Java 8] 메서드 레퍼런스

홍정완·2022년 6월 13일
0

Java

목록 보기
4/25
post-thumbnail

메서드 레퍼런스


람다 표현식으로 구현 시 단 하나의 메서드만을 호출하는 경우, 매개변수 없이 축약해서 사용할 수 있도록 해준다.


  • 메서드 레퍼런스에는 많은 코드가 생략되어 있기 때문에 사용하려는 메서드의 인자와 리턴 타입을 알고 있어야 한다.



메서드 참조 방법


  • 메서드 또는 생성자의 매개변수로 람다의 입력 값을 받고, 리턴 값 또는 생성한 객체는 람다의 리턴 값이다.

  • 사용할 메서드
public class Hello {

    private String name;


    public Hello() {
    }

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

    public static String printJava() {
        return "Hello, Java!!";
    }

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

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

}



Static 메서드 레퍼런스


  • 타입::스태틱 메서드 형태

Supplier<String> supplier = Hello::printJava; // () -> Hello.printJava();

System.out.println(supplier.get()); // [결과]: Hello, Java!!



특정 객체의 Instance 메서드 레퍼런스


  • 객체 레퍼런스:: 인스턴스 메서드 형태

Hello hello = new Hello();

Function<String, String> function = hello::print; // s -> hello.print(s);

System.out.println(function.apply("Java!")); // [결과]: Hello, Java!



Constructor 메서드 레퍼런스


  • 타입::new 형태

Function<String, Hello> newHello = Hello::new; // s -> new Hello(s);

System.out.println(newHello.apply("Java").printName()); // [결과]: Hello, Java



임의 객체의 Instance 메서드 레퍼런스


  • 타입::인스턴스 메서드 형태

String[] names = {"a", "c", "b"};

Arrays.sort(names, String::compareToIgnoreCase);

System.out.println(Arrays.toString(names)); // [결과]: [a, b, c]
profile
습관이 전부다.

0개의 댓글