18.5 메소드 참조 (Method Reference)


1. “재사용”의 끝판왕 ♻️

람다식도 짧지만, 이미 있는 메소드를 사용할 때는 더 짧게 줄일 수 있습니다. 매개변수를 받아서 토스(toss)만 하는 경우라면, “그냥 쟤꺼 쓰세요”라고 가리키는 것이 메소드 참조입니다.

  • 람다식: (left, right) -> Math.max(left, right);
  • 메소드 참조: Math :: max;


2. 사용 방법 (::)

콜론 두 개(::)를 사용합니다.

1) 정적(static) 메소드 참조

// 클래스명 :: 메소드명
Math :: max
Computer :: staticMethod

2) 인스턴스 메소드 참조

// 참조변수 :: 메소드명
System.out :: println
com :: instanceMethod

3) 매개변수의 메소드 참조

첫 번째 매개변수(a)가 메소드의 주인이 되고, 두 번째 매개변수(b)가 인자가 되는 경우입니다.

  • 람다식: (a, b) -> a.compareToIgnoreCase(b)
  • 참조: String :: compareToIgnoreCase (타입 :: 메소드명)


3. 예제: 계산기와 문자열 비교

package ch18.sec05;

public class MethodReferenceExample {
    public static void main(String[] args) {
        Person person = new Person();

        // 1. 정적 메소드 참조
        // 람다식: (x, y) -> Computer.staticMethod(x, y)
        person.action(Computer :: staticMethod);

        // 2. 인스턴스 메소드 참조
        Computer com = new Computer();
        // 람다식: (x, y) -> com.instanceMethod(x, y)
        person.action(com :: instanceMethod);
        
        // 3. 매개변수의 메소드 참조
        // 람다식: (a, b) -> a.compareToIgnoreCase(b)
        person.ordering(String :: compareToIgnoreCase);
    }
}

실행 결과

결과: 14.0  (정적 메소드: 10 + 4)
결과: 40.0  (인스턴스 메소드: 10 * 4)
홍길동은 김길동보다 뒤에 옵니다. (String 비교)

핵심: “내가 직접 코드를 짜는 게 아니라, 이미 있는 메소드를 연결만 시켜줄 때” 사용합니다.

서브목차