본문 바로가기
Develop/Java

[Java] 시간 구하는 방법 비교

by 연로그 2021. 1. 14.
반응형

Java에서 현재 시간을 구하는 방법은 3가지가 있다.

System.currentTimeMillis()
new Date()
Calendar.getInstance().getTime()

 

System.currentTimeMillis()와 new Date()의 속도 자체는 크게 다르지 않다.

다만 Calendar.getInstance().getTime()의 경우에는 객체 생성부터 윤달 같은 여러 상황을 고려해 계산하기 때문에 상대적으로 느리고 복잡하다.

 또한, 10월의 숫자가 '9'이기 때문에 혼란을 야기한다.

 

System.currentTimeMillis()는 객체를 만들지 않고

new Date() GC를 이용한다는 점에서 분명 System.currentTimeMillis()가 더 우수한 성능을 보인다.

(GC; Garbage Collector: 더 이상 필요 없는 객체를 찾아 지우는 작업을 함

 Grabage: 주소를 잃어버려서 사용할 수 없는 메모리, 사용하지 않고 메모리를 가지고 있는 객체 등)

 

JDK를 까보면 Calendar.getInstance()와 Date는 다음과 같이 구성되어 있다.

public GregorianCalendar(TimeZone zone, Locale aLocale) {
    super(zone, aLocale);
    gdate = (BaseCalendar.Date) gcal.newCalendarDate(zone);
    setTimeInMillis(System.currentTimeMillis());
}
public Date() {
    this(System.currentTimeMillis());
}

 

보통 사람이 읽는 값을 실제로 표시해야 하는 경우에만 Calendar나 Date를 사용하고, 그 외에 단순히 시간을 계산하는 등에서는 System.currentTimeMillis()를 많이 사용한다.

 

하지만 Calendar와 Date는 또 한가지 문제점이 있다.

불변 객체가 아니라는 것. 멀티스레드 환경에서는 언제든 문제가 발생할 수 있어 사람들이 Joda-time을 이용하곤 했다.

이는 JAVA 8 버전이 출시되며 LocalDate 등을 통해 해결되었다.

 

3가지를 출력해보면 다음과 같은 결과가 뜬다.

System.currentTimeMillis()는 timestamp 형태, 나머지는 실제 날짜와 시간을 반환한다.

(+출력 형식은 DateFormat으로 변환할 수 있다.)


참고

www.crocus.co.kr/1636

stackoverflow.com/questions/368094/system-currenttimemillis-vs-new-date-vs-calendar-getinstance-gettime

반응형