[java] 자바 함수형 인터페이스를 사용하여 시간을 측정하는 방법은 어떻게 되나요?

시간을 측정하는 일반적인 방법은 System.currentTimeMillis() 메소드를 사용하여 시작 시간과 종료 시간을 측정하고 두 시간의 차이를 계산하는 것입니다. 그러나 이 방법은 번거롭고 가독성이 떨어질 수 있습니다.

이를 해결하기 위해 자바 8부터는 함수형 인터페이스인 Supplier<T>를 사용하여 시간을 측정하는 방법이 제공됩니다. Supplier<T>는 매개변수 없이 결과값을 반환하는 함수형 인터페이스로, 시간 측정을 위해 사용할 수 있습니다.

다음은 함수형 인터페이스를 사용하여 시간을 측정하는 예제 코드입니다:

import java.util.function.Supplier;

public class TimeMeasurement {
    public static void measureTime(Supplier<Void> action) {
        long startTime = System.currentTimeMillis();
        action.get();
        long endTime = System.currentTimeMillis();

        long elapsedTime = endTime - startTime;
        System.out.println("총 소요 시간: " + elapsedTime + "밀리초");
    }

    public static void main(String[] args) {
        // 시간을 측정할 코드를 람다 표현식으로 전달합니다.
        measureTime(() -> {
            // 측정하고자 하는 코드를 작성합니다.
            for (int i = 1; i <= 1000000; i++) {
                System.out.println(i);
            }
            return null;
        });
    }
}

위 코드에서 measureTime 메소드는 Supplier<Void> 인터페이스를 매개변수로 받습니다. 이 메소드는 시작 시간과 종료 시간을 측정하고, 측정하고자 하는 코드를 실행하고, 소요된 시간을 출력합니다.

measureTime 메소드를 호출할 때 람다 표현식을 사용하여 측정하고자 하는 코드를 전달합니다. 위 예제에서는 1부터 1000000까지의 숫자를 출력하는 부분을 측정하고 있습니다.

실행 결과로는 총 소요 시간이 출력되며, 필요에 따라 이 값을 다른 로직에 활용할 수도 있습니다.

이처럼 자바에서는 함수형 인터페이스를 사용하여 코드 실행 시간을 측정할 수 있습니다. 함수형 프로그래밍의 장점을 활용하여 가독성 좋은 코드를 작성할 수 있습니다.