Java를 배워보자/4. 자바 API

자바 Date 클래스

_Blue_Sky_ 2024. 9. 27. 00:02
728x90
728x90

자바 Date 클래스: 날짜와 시간을 다루는 기본 클래스, 그리고 그 너머

소개

자바에서 날짜와 시간을 다루는 가장 기본적인 클래스 중 하나인 Date 클래스는 오랫동안 사용되어 왔습니다. 하지만 자바 8 이후부터는 더욱 향상된 기능을 제공하는 java.time 패키지의 클래스들이 주목받고 있습니다. 이 글에서는 Date 클래스의 기본적인 사용법과 함께, java.time 패키지의 클래스들과 비교하며 Date 클래스의 한계점과 개선점을 살펴보고자 합니다.

Date 클래스의 기본적인 사용법

Date 클래스는 1970년 1월 1일 0시 0분 0초를 기준으로 경과된 밀리초를 나타내는 long 타입의 값을 가지고 있습니다. 즉, Date 객체를 생성하면 특정 시점을 나타내는 숫자 값이 저장되는 것입니다.

import java.util.Date;

public class DateExample {
    public static void main(String[] args) {
        // 현재 시각을 나타내는 Date 객체 생성
        Date now = new Date();
        System.out.println(now);
    }
}
 
 

위 코드를 실행하면 현재 시각이 콘솔에 출력됩니다. 하지만 출력되는 형식은 시스템의 Locale 설정에 따라 다를 수 있습니다.

Date 클래스의 문제점

Date 클래스는 다음과 같은 문제점을 가지고 있습니다.

  • 가변성: Date 객체는 가변적이어서, 한번 생성된 객체의 값이 변경될 수 있습니다. 이는 멀티 스레드 환경에서 예기치 못한 문제를 발생시킬 수 있습니다.
  • 불명확한 시간대: Date 클래스는 특정 시간대를 명시적으로 나타내는 방법이 없습니다. 따라서 서버의 시스템 시간을 기준으로 동작하며, 다른 시간대의 시간을 표현하기 위해서는 별도의 처리가 필요합니다.
  • 제한적인 기능: Date 클래스는 날짜와 시간을 계산하거나 조작하는 기능이 부족합니다. 날짜 간의 차이를 구하거나 특정 날짜에 특정 일수를 더하는 등의 작업을 수행하기 위해서는 Calendar 클래스와 함께 사용해야 합니다.

java.time 패키지 소개

자바 8부터 도입된 java.time 패키지는 Date 클래스의 문제점을 해결하고 더욱 강력하고 직관적인 기능을 제공합니다. java.time 패키지의 주요 클래스는 다음과 같습니다.

  • LocalDate: 날짜만을 나타냅니다. (예: 2023-11-22)
  • LocalTime: 시간만을 나타냅니다. (예: 10:30:20)
  • LocalDateTime: 날짜와 시간을 함께 나타냅니다. (예: 2023-11-22T10:30:20)
  • ZonedDateTime: 날짜, 시간, 시간대를 함께 나타냅니다. (예: 2023-11-22T10:30:20+09:00)

java.time 패키지의 장점

  • 불변성: java.time 패키지의 클래스들은 불변 객체이므로, 한번 생성된 객체의 값이 변경되지 않습니다.
  • 명확한 시간대 표현: ZonedDateTime 클래스를 사용하여 특정 시간대를 명시적으로 나타낼 수 있습니다.
  • 다양한 기능: 날짜와 시간 계산, 형식 변환 등 다양한 기능을 제공합니다.
  • 직관적인 API: 인간이 읽기 쉽고 이해하기 쉬운 API를 제공합니다.

Date 클래스 vs. java.time 패키지

비교 항목Date 클래스java.time 패키지
가변성 가변 불변
시간대 표현 불가 가능 (ZonedDateTime)
기능 제한적 다양
API 불편 직관적

결론

Date 클래스는 자바의 오래된 클래스로, 가변성, 불명확한 시간대, 제한적인 기능 등의 문제점을 가지고 있습니다. 반면, java.time 패키지는 이러한 문제점을 해결하고 더욱 강력하고 직관적인 기능을 제공합니다. 따라서 새로운 자바 프로젝트에서는 java.time 패키지를 사용하는 것이 좋습니다.

 

728x90
728x90

'Java를 배워보자 > 4. 자바 API' 카테고리의 다른 글

자바 예외 처리 (try-catch)  (0) 2024.09.27
자바 Collection 프레임워크 (List, Set, Map)  (0) 2024.09.27
자바 Math 클래스  (0) 2024.09.26
자바 Wrapper 클래스  (0) 2024.09.26
자바 String 클래스  (0) 2024.09.26