728x90
코드 실행 시간 측정 방법
코드를 작성할 때 시간 복잡도를 고려하는 것이 중요합니다. 하지만 O(n) 같은 개념적인 복잡도뿐만 아니라, 실제 실행 시간을 측정하는 것도 필요합니다. 이를 위해 정확한 실행 시간을 측정하는 방법을 정리해 보았습니다.
1. System.currentTimeMillis() , System.nanoTime()
public class Main {
static final long COUNT = 100_000_000;
public static void main(String[] args) {
// 시작 시간 측정
long startTime = System.currentTimeMillis();
long startNanoTime = System.nanoTime();
for (long i = 0; i < count; i++) {
}
// 종료 시간 측정
long endTime = System.currentTimeMillis();
long endNanoTime = System.nanoTime();
System.out.println(endTime - startTime);
System.out.println(endNanoTime - startNanoTime);
}
}
- System.currentTimeMillis()를 사용하여 현재 시간을 밀리초(ms) 단위로 가져올 수 있음
- System.nanoTime()를 사용하여 현재 시간을 나노 단위로 가져올 수 있음
- 시작 시간과 종료 시간을 비교하여 코드의 실행 시간을 측정
2. 스프링의 StopWatch 활용
스프링 프레임워크에서 제공하는 StopWatch를 활용하면 더 정밀하고 편리하게 시간을 측정할 수 있습니다.
(1) 서비스 코드
@Service
public class TestService {
private final long COUNT = 1_000_000_000;
public void test() {
for (int i = 0; i < COUNT; i++) {
// 실행할 코드
}
}
}
(2) 테스트 코드 (SpringBootTest 활용)
@SpringBootTest
class StopwatchTestApplicationTests {
@Autowired
private TestService testService;
@Test
void stopWatchTest() {
StopWatch stopWatch = new StopWatch();
stopWatch.start(); // 시간 측정 시작
testService.test(); // 테스트할 메서드 실행
stopWatch.stop(); // 시간 측정 종료
System.out.println(stopWatch.prettyPrint()); // 실행 시간 출력
}
}
- StopWatch 클래스는 스프링 프레임워크에서 제공하는 유틸리티
- start()와 stop()을 사용해 명확하게 실행 구간을 설정 가능
- prettyPrint()를 이용하면 더 보기 쉬운 형식으로 실행 시간 출력 가능
- 밀리초보다 더 정밀한 단위까지 측정 가능 (nanoTime 사용 가능)
결론
- 빠르게 측정할 경우 → System.currentTimeMillis()
- 정확한 측정 및 여러 구간을 측정할 경우 → StopWatch
728x90
'Java' 카테고리의 다른 글
[Java] Deque 구현 (1) | 2025.02.04 |
---|---|
[Java] Stack 구현하기 (1) | 2025.02.01 |
[Java] SinglyLinkedList 구현 (1) | 2025.01.27 |
[Java] 객체 null 체크 Objects.isNull(), obj == null (1) | 2025.01.25 |
[Java] 동등성 (equals(), hashCode()) (0) | 2025.01.05 |