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 단어/분
✅ 정확하게 입력했습니다!
감사합니다.
'Java' 카테고리의 다른 글
[Java] Stack 구현 예제 (1) | 2025.03.31 |
---|---|
[JAVA] HttpURLConnection을 활용한 HTTP 통신과 REST API 이해하기 (0) | 2025.03.27 |
[Java] Swing을 사용하여 간단한 계산기 만들기 (0) | 2025.03.24 |
[JAVA] ExecutorService로 Thread Pool 구현하기 (0) | 2025.03.20 |
[Java] 컬렉션(Collection) 기초 개념과 List, Set, Map 차이 (0) | 2025.03.19 |