[java] 자바 11에서 추가된 Clock 클래스의 활용 방법

자바 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 클래스는 시간 관련 작업을 더욱 효율적이고 유연하게 처리할 수 있도록 도와줍니다. 현재 시간을 얻거나 특정 시간대로 시간을 설정하거나 시간 가속/지연을 시뮬레이션하는 등 다양한 작업에 유용하게 사용할 수 있습니다.

참고