본문 바로가기
Java

[Java] nanoTime 사용해서 경과 시간 측정하기

by teamnova 2025. 3. 26.
728x90

 

안녕하세요 오늘은 nanoTime 자바 메서드를 사용하여 경과 시간을 측정하는 기능을 구현해보도록 하겠습니다. 

알고리즘 성능 테스트, 타자 속도 측정 게임 등에 응용해볼 수 있습니다. 

 

 

이번에 사용할 System.nanoTime() 은 자바 기본 클래스인 System 에 포함된 내장 메서드 입니다

해당 메소드는 나노초(ns -> 1초 = 1,000,000,000 나노초) 단위로 경과 시간을 측정할 수 있으며 현재 시간을 제공하지는 않습니다. 

 

 

1. 경과 시간 측정 (nanoTime 버전)

public class NanoTimeExample {
    public static void main(String[] args) {
        long startTime = System.nanoTime(); // 시작 시간 (ns)

        // 예: 연산 또는 작업 시뮬레이션
        for (int i = 0; i < 1_000_000; i++) {
            Math.pow(i, 0.5); // 루트 계산
        }

        long endTime = System.nanoTime(); // 끝난 시간 (ns)

        long elapsedTime = endTime - startTime;
        double elapsedTimeInMs = elapsedTime / 1_000_000.0; // 밀리초 단위로 변환

        System.out.println("걸린 시간: " + elapsedTimeInMs + " ms");
    }
}

 

시작 시간과 끝난 시간을 long 타입 변수에 담고 그 사이에 작업이 진행되도록 합니다. 

밀리초 단위로 변환하면 걸린 시간을 확인할 수 있습니다. 

 

 

 

 

이번에는 이를 활용하여 타자 속도 측정기를 구현해보겠습니다. 

사용자가 문장을 입력하는 데에 걸린 시간을 측정해서 입력한 단어수와 타자 속도를 계산해보는 간단한 프로그램 입니다.

 

2. 타자 속도 측정기  

import java.util.Scanner;

public class TypingSpeedTest {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String target = "The quick brown fox jumps over the lazy dog";
        System.out.println("다음 문장을 똑같이 입력해 주세요:");
        System.out.println(target);
        System.out.println("\n준비되면 Enter 키를 누르세요!");

        scanner.nextLine(); // 준비 완료 대기

        System.out.println("시작! 문장을 입력하세요:");

        long startTime = System.nanoTime(); // 시작 시간 측정

        String input = scanner.nextLine(); // 사용자 입력

        long endTime = System.nanoTime(); // 종료 시간 측정

        long elapsedNano = endTime - startTime;
        double elapsedSeconds = elapsedNano / 1_000_000_000.0; // 초로 변환

        // 단어 수 세기 (공백 기준 분리)
        int wordCount = input.trim().isEmpty() ? 0 : input.trim().split("\\s+").length;

        // WPM 계산
        double wpm = (wordCount / elapsedSeconds) * 60;

        System.out.println("\n==========================");
        System.out.printf("입력한 시간: %.2f초\n", elapsedSeconds);
        System.out.println("입력한 단어 수: " + wordCount);
        System.out.printf("타자 속도 (WPM): %.2f 단어/분\n", wpm);

        // 정확도 체크 (선택)
        if (input.equals(target)) {
            System.out.println("✅ 정확하게 입력했습니다!");
        } else {
            System.out.println("⚠️ 오타가 있거나 문장이 다릅니다.");
        }

        System.out.println("==========================");
        scanner.close();
    }
}

 

 

 

결과 내용 

입력한 시간: 7.84초
입력한 단어 수: 9
타자 속도 (WPM): 68.86 단어/분
✅ 정확하게 입력했습니다!

 

 

감사합니다.