Java에서 매개 변수로 함수를 전달하는 방법

Hassan Saeed 2023년10월12일
  1. 인터페이스의 인스턴스를 사용하여 Java에서 매개 변수로 함수 전달
  2. java.lang.reflect.Method를 사용하여 Java에서 매개 변수로 함수 전달
Java에서 매개 변수로 함수를 전달하는 방법

이 튜토리얼에서는 Java의 다른 함수에 매개 변수로 함수를 전달하는 방법에 대해 설명합니다.

Java에서 함수를 매개 변수로 전달하는 두 가지 다른 방법에 대해 설명합니다.

인터페이스의 인스턴스를 사용하여 Java에서 매개 변수로 함수 전달

이 메소드에서는 해당 메소드의 스켈레톤 만 포함하는 인터페이스를 구현하는 클래스에서 매개 변수로 전달해야하는 함수를 작성해야합니다.

아래 예는이를 설명합니다.

매개 변수로 전달할 함수 골격을 포함하는 Callable인터페이스를 정의합니다. 다음으로 Callable을 구현하고 함수의 전체 정의를 포함하는 클래스를 정의합니다. 이 함수는newFunction(Callable callable, int param)과 같은 다른 함수에 전달할 수 있습니다. 여기서callableCallable 인터페이스의 인스턴스를 나타냅니다.

전체 작동 예제가 아래 코드에 나와 있습니다.

interface Callable {
  public void call(int param);
}

class Test implements Callable {
  public void call(int param) {
    System.out.println(param);
  }
}

public class HelloWorld {
  public static void invoke(Callable callable, int param) {
    callable.call(param);
  }
  public static void main(String[] args) {
    Callable cmd = new Test();
    invoke(cmd, 10);
  }
}

출력:

> 10

java.lang.reflect.Method를 사용하여 Java에서 매개 변수로 함수 전달

함수outerFunction에 매개 변수로 전달해야하는functionToPass 함수가 있습니다.

functionToPass를 정의하는 방법에는 차이가 없습니다. 그러나outerFunction을 정의하려면outerFunction(Object object, Method method, param1, param2, ...)과 같은 특정 구문을 따라야합니다.

아래 예를 살펴보십시오.

import java.lang.reflect.Method;

public class Main {
  public void functionToPass(String message) {
    String[] split = message.split(" ");
    for (int i = 0; i < split.length; i++) System.out.println(split[i]);
  }

  public void outerFunction(Object object, Method method, String message) throws Exception {
    Object[] parameters = new Object[1];
    parameters[0] = message;
    method.invoke(object, parameters);
  }

  public static void main(String[] args) throws Exception {
    Class[] parameterTypes = new Class[1];
    parameterTypes[0] = String.class;
    Method functionToPass = Main.class.getMethod("functionToPass", parameterTypes[0]);
    Main main = new Main();
    main.outerFunction(main, functionToPass, "This is the input");
  }
}

다음은 동일한 방법의 또 다른 예입니다. 반환 값도있는 함수를 만들고 있습니다.

import java.lang.reflect.Method;

public class Main {
  public int functionToPass(String message) {
    return message.length();
  }

  public void outerFunction(Object object, Method method, String message) throws Exception {
    Object[] parameters = new Object[1];
    parameters[0] = message;
    System.out.println(method.invoke(object, parameters));
  }

  public static void main(String[] args) throws Exception {
    Class[] parameterTypes = new Class[1];
    parameterTypes[0] = String.class;
    Method functionToPass = Main.class.getMethod("functionToPass", parameterTypes[0]);
    Main main = new Main();
    main.outerFunction(main, functionToPass, "This is the input");
  }
}

관련 문장 - Java Function