Clock
Clock (시간대 기반 현재 시각 접근)
시간대(time-zone)를 사용해 현재 순간(instant)과 날짜·시간에 접근할 수 있게 해 주는 클래스예요. 이 추상 클래스의 인스턴스는 현재 순간의 플러그인 가능한 표현에 접근하는 데 쓰이며, 저장된 시간대로 해석해 현재 날짜와 시간을 찾을 수 있어요.
본문
Clock은 System.currentTimeMillis()와 TimeZone.getDefault() 대신 사용할 수 있어요. Clock 사용은 선택적이에요. 주요 날짜·시간 클래스들은 기본 시간대의 시스템 시계를 쓰는 now() 팩토리 메서드도 갖고 있어요.
이 추상화의 주된 목적은 필요할 때 대체 시계를 끼워 넣을 수 있게 하는 것이에요. 애플리케이션이 정적 메서드 대신 객체로 현재 시간을 얻으면 테스트를 단순화할 수 있어요. 그래서 이 추상 클래스는 결과가 실제로 시간축(time-line)상의 현재 순간을 나타낸다고 보장하지 않아요. 대신 현재 순간과 시간대가 무엇인지에 대한 통제된 관점을 제공하도록 해요.
애플리케이션의 모범 사례는 현재 순간과 시간대가 필요한 메서드에 Clock을 전달하는 것이에요. 의존성 주입(dependency injection) 프레임워크가 이를 이루는 한 방법이에요.
public class MyBean {
private Clock clock; // dependency inject
...
public void process(LocalDate eventDate) {
if (eventDate.isBefore(LocalDate.now(clock))) {
...
}
}
}
이 방식은 테스트 중에 fixed나 offset 같은 대체 시계를 쓸 수 있게 해줘요. 시스템 팩토리 메서드는 사용 가능한 최상의 시스템 시계를 기반으로 시계를 제공해요. System.currentTimeMillis() 또는 더 높은 해상도의 시계가 있다면 그것을 쓸 수 있어요.
public abstract class Clock