자바 11부터는 java.time
패키지에 Clock
클래스가 추가되었습니다. Clock
클래스는 시간을 추적하고 측정하기 위해 사용할 수 있는 유용한 도구입니다. 이번 블로그에서는 자바 11에서 추가된 Clock
클래스를 어떻게 활용하는지 살펴보겠습니다.
Clock 클래스 소개
Clock
클래스는 시간에 대한 정보를 제공하는 인터페이스입니다. 이 클래스를 사용하여 현재 시간을 얻거나, 특정 시간대의 시간을 얻을 수 있습니다. 또한 Clock
클래스는 시간이 흐르는 속도를 조작하여 시간 가속 또는 지연을 시뮬레이션할 수도 있습니다.
현재 시간 얻기
Clock.systemDefaultZone()
메서드를 사용하여 현재 시스템의 기본 시간대로 생성된 Clock
인스턴스를 얻을 수 있습니다. 다음은 이 메서드를 사용하여 현재 시간을 얻는 예제 코드입니다.
import java.time.Clock;
import java.time.Instant;
public class ClockExample {
public static void main(String[] args) {
Clock clock = Clock.systemDefaultZone();
Instant now = clock.instant();
System.out.println("현재 시간: " + now);
}
}
특정 시간대로 시간 얻기
Clock.system()
메서드를 사용하여 특정 시간대로 생성된 Clock
인스턴스를 얻을 수 있습니다. 다음은 이 메서드를 사용하여 미국 동부 시간대로 생성된 Clock
인스턴스를 얻는 예제 코드입니다.
import java.time.Clock;
import java.time.Instant;
import java.time.ZoneId;
public class ClockExample {
public static void main(String[] args) {
Clock clock = Clock.system(ZoneId.of("America/New_York"));
Instant now = clock.instant();
System.out.println("미국 동부 시간: " + now);
}
}
시간 가속 또는 지연 시뮬레이션
Clock.tick(Clock baseClock, Duration tickDuration)
메서드를 사용하여 시간 가속 또는 지연을 시뮬레이션할 수 있습니다. 다음은 이 메서드를 사용하여 기본 Clock
의 2배 속도로 시간을 추적하는 예제 코드입니다.
import java.time.Clock;
import java.time.Duration;
import java.time.Instant;
public class ClockExample {
public static void main(String[] args) {
Clock baseClock = Clock.systemDefaultZone();
Clock acceleratedClock = Clock.tick(baseClock, Duration.ofSeconds(1));
for (int i = 0; i < 10; i++) {
Instant now = acceleratedClock.instant();
System.out.println("가속된 시간: " + now);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
결론
자바 11의 Clock
클래스는 시간 관련 작업을 더욱 효율적이고 유연하게 처리할 수 있도록 도와줍니다. 현재 시간을 얻거나 특정 시간대로 시간을 설정하거나 시간 가속/지연을 시뮬레이션하는 등 다양한 작업에 유용하게 사용할 수 있습니다.