Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 System.nanoTime()으로 경과 시간을 나노초 단위로 측정하는 방법

경과 시간(Elapsed Time)이란 하나의 이벤트가 시작 지점부터 종료 지점까지 걸린 시간을 의미합니다. Java에서는 여러 가지 방법으로 경과 시간을 측정할 수 있으며, 그중 System.nanoTime() 메서드를 사용하면 나노초(nanoseconds) 단위의 정밀한 측정이 가능합니다.

nanoTime() 메서드란?

nanoTime() 메서드는 현재 시간을 나노초 단위로 반환합니다. 이 메서드를 활용하면 특정 메서드의 실행에 소요되는 시간을 나노초 단위로 정확하게 측정할 수 있습니다.

측정 절차

  • 시작 시간 기록: nanoTime() 메서드를 호출하여 현재 시간을 나노초 단위로 가져옵니다.
  • 대상 메서드 실행: 측정하고자 하는 메서드를 실행합니다.
  • 종료 시간 기록: 메서드 실행이 끝난 후 다시 nanoTime() 메서드를 호출하여 현재 시간을 가져옵니다.
  • 차이 계산: 종료 값에서 시작 값을 뺀 차이가 곧 경과 시간입니다.

예제 코드

public class Example {
    public void test(){
        int num = 0;
        for(int i=0; i<=50; i++){
            num = num + i;
            System.out.print(num + ", ");
        }
    }
    public static void main(String args[]){
        // 시작 시간 기록
        long begin = System.nanoTime();
        // 측정 대상 메서드 실행
        new Example().test();
        // 종료 시간 기록
        long end = System.nanoTime();
        // 경과 시간 계산
        long time = end - begin;
        System.out.println();
        System.out.println("Elapsed Time: " + time);
    }
}

실행 결과

0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120, 136, 153, 171, 190, 210, 231, 253, 276, 300, 325, 351, 378, 406, 435, 465, 496, 528, 561, 595, 630, 666, 703, 741, 780, 820, 861, 903, 946, 990, 1035, 1081, 1128, 1176, 1225, 1275,
Elapsed Time: 1530200

참고 사항

nanoTime()은 벽시계 시간(wall-clock time)이 아닌 임의의 기준점으로부터 경과한 시간을 반환하므로, 두 시점 간의 차이를 구하는 용도로만 사용해야 합니다. 또한 나노초 단위의 정밀한 성능 측정이 필요하다면 Java 8 이상에서 제공하는 InstantDuration 클래스를 활용하는 것도 좋은 대안입니다.