경과 시간(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 이상에서 제공하는 Instant와 Duration> 클래스를 활용하는 것도 좋은 대안입니다.