IT

[Java] 메서드 참조(Method Reference)

data-cloud 2025. 1. 22. 22:08
반응형

 

 

☕️ 메서드 참조(Method reference)란?

메서드 참조(method reference)란 람다 표현식이 단 하나의 메서드만을 호출하는 경우에 이중 콜론(::) 기호를 사용하여 메서드를 참조하는 방식을 일컫는다. 메서드 참조 문법은 다음과 같다.

클래스이름::메서드이름

또는

참조변수이름::메서드이름

 

 

 

☕️ 람다식과 메서드 참조의 문법 차이

이전 포스팅에서 알아보았던 함수형 인터페이스를 토대로 람다식과 메서드 참조는 문법적으로 어떤 차이가 있는지 알아보도록 하자.
아래 코드는 문자열 형태의 숫자를 입력받아 숫자로 반환하는 코드이다.

import java.util.function.Function;

public class MethodReferenceEx {
    public static void main(String[] args) {
        // 람다 표현식
        Function<String, Integer> f1 = s -> Integer.parseInt(s);
        int num1 = f1.apply("007");
        System.out.println(num1); // 7

        // 메서드 참조
        Function<String, Integer> f2 = Integer::parseInt;
        int num2 = f2.apply("008");
        System.out.println(num2); // 8
    }
}

이처럼 메서드 참조는 이중 콜론(::)을 사용하여 클래스 이름과 메서드 이름을 구분하며, 람다식과 달리 인수를 전달할 필요가 없어 코드를 더욱 간결하게 만들 수 있다.

 

 

반응형

 

☕️ 메서드 참조 유형

자바에서는 크게 3가지 유형의 메서드 참조를 제공한다.

  • 정적 메서드 참조(Class::StaticMethod)
  • 인스턴스 메서드 참조(Class::instanceMethod)
  • 생성자 참조(Class::new)
/* 1. 정적 메서드 참조 */
public class StaticEx {
    public static void main(String[] args) {
        // 람다 표현식
        Function<String, Integer> f1 = s -> Integer.parseInt(s);
        int num1 = f1.apply("007");
        System.out.println(num1); // 7

        // 메서드 참조
        Function<String, Integer> f2 = Integer::parseInt;
        int num2 = f2.apply("008");
        System.out.println(num2); // 8
    }
}
/* 2. 인스턴스 메서드 참조 */
class ParseUtils {
    public int convert(String num) {
        return Integer.parseInt(num);
    }
}

public class InstanceEx {
    public static void main(String[] args) {
        // 인스턴스 생성
        ParseUtils parseUtils = new ParseUtils();
        
        // 람다 표현식
        Function<String, Integer> f1 = s -> parseUtils.convert(s);
        System.out.println(f1.apply("001")); // 1

        // 메서드 참조
        Function<String, Integer> f2 = parseUtils::convert;
        System.out.println(f2.apply("002")); // 2
    }
}
/* 3. 생성자 참조 */
class User {
    String name;

    User(String name) {
        this.name = name;
    }
}

public class ConstructorEx {
    public static void main(String[] args) {
        // 람다 표현식
        Function<String, User> f1 = s -> new User(s);
        User user1 = f1.apply("choi");
        System.out.println(user1.name); // choi

        // 메서드 참조
        Function<String, User> f2 = User::new;
        User user2 = f2.apply("kim");
        System.out.println(user2.name); // kim
    }
}

 

 

 


 

References.

1. TCP SCHOL - 메소드 참조
2. KSR의 저장소 - [Java] 메서드 참조(Method reference) - 정적 메서드, 생성자 참조와 람다표현식 활용
3. 
DevStory - [Java]메서드 참조(Method reference)

 

반응형