JAVA 80%

java.util package

lshjju 2025. 11. 5. 16:50

자바에서 시간과 날짜를 다룰 때 가장 기본적으로 만나는 java.util 패키지의 날짜 관련 클래스들.

자바의 날짜 시스템은 역사에 따라 변화해 왔는데, 그 중심에 있는 두 주인공 Date와 Calendar를 독립된 예제와 함께 정리해 드릴게요.



📘 자바의 날짜와 시간 관리

1. Date class (날짜 정보의 기록원)

  • 설명: 특정 시점의 날짜와 시간 정보를 밀리초(ms) 단위로 저장하는 클래스입니다.
  • 비유: 아주 정밀한 '타임스탬프'가 찍힌 메모지와 같습니다.
  • 특징: 자바 초기부터 있었던 클래스로, 현재는 많은 메서드가 사용 중단(Deprecated)되었지만 여전히 데이터베이스와의 연동이나 간단한 날짜 표시용으로 자주 쓰입니다.
Java
 
import java.util.Date;

public class DateExample {
    public static void main(String[] args) {
        // 현재 시스템의 날짜와 시간 정보를 가진 객체 생성
        Date now = new Date();
        
        // 기본 출력 (영문 요일, 월, 일, 시간, 시간대, 연도 순)
        System.out.println("현재 날짜 정보: " + now.toString());
        
        // 1970년 1월 1일 0시부터 흐른 밀리초 값을 가져옴
        long time = now.getTime();
        System.out.println("1970년부터 흐른 ms: " + time);
    }
}

2. Calendar class (날짜 계산의 마법사)

  • 설명: 연도, 월, 일, 요일 등 날짜의 요소를 개별적으로 추출하거나 계산하기 위해 만들어진 추상 클래스입니다.
  • 비유: 달력 한 권을 통째로 넘겨보며 특정 날짜를 찾거나 더하고 빼는 '스마트 달력'과 같습니다.
  • 특징: Date보다 훨씬 기능이 많습니다. 추상 클래스이므로 new로 직접 객체를 만들 수 없고, getInstance() 메서드를 통해 시스템의 시간대 정보를 담은 객체를 가져옵니다.
Java
 
import java.util.Calendar;

public class CalendarExample {
    public static void main(String[] args) {
        // 시스템의 현재 날짜와 시간 정보를 가진 객체 가져오기
        Calendar now = Calendar.getInstance();
        
        // 특정 정보 추출 (월은 0부터 시작하므로 +1 필수!)
        int year = now.get(Calendar.YEAR);
        int month = now.get(Calendar.MONTH) + 1; 
        int day = now.get(Calendar.DAY_OF_MONTH);
        int dayOfWeek = now.get(Calendar.DAY_OF_WEEK); // 1(일) ~ 7(토)
        
        System.out.printf("오늘은 %d년 %d월 %d일입니다.\n", year, month, day);
        
        // 날짜 계산 (오늘로부터 100일 뒤는?)
        now.add(Calendar.DAY_OF_MONTH, 100);
        System.out.println("오늘부터 100일 뒤: " + now.get(Calendar.YEAR) + "년 " 
                           + (now.get(Calendar.MONTH) + 1) + "월 " 
                           + now.get(Calendar.DAY_OF_MONTH) + "일");
    }
}

👨‍🏫 쉽게 이해하는 핵심 포인트

  1. 월(Month)의 함정: Calendar에서 1월은 숫자 0입니다. 그래서 화면에 보여줄 때는 항상 +1을 해줘야 우리가 아는 월이 나옵니다.
  2. Date와 Calendar의 상호 변환: 실무에서는 두 클래스를 섞어서 써야 할 때가 많습니다.
    • Date → Calendar: calendar.setTime(date);
    • Calendar → Date: Date date = calendar.getTime();
  3. 불변성의 부재: 두 클래스 모두 객체 내부의 값이 바뀔 수 있는(Mutable) 성질이 있어, 멀티 쓰레드 환경에서는 주의가 필요합니다.
    • 참고: 이 단점을 보완하기 위해 자바 8부터 java.time 패키지(LocalDate 등)가 새로 등장했습니다.

오늘의 요약

  • Date: 특정 시점의 시각을 기억하는 '기록지' 역할.
  • Calendar: 연, 월, 일 정보를 뽑아내거나 날짜를 계산하는 '달력' 역할.
  • 주의: Calendar의 월(Month)은 0부터 시작한다는 점을 꼭 기억하자!

날짜와 시간을 다루는 자바의 전통적인 방식들을 마스터하셨네요!


'JAVA 80%' 카테고리의 다른 글

Collection framework  (0) 2025.11.05
Thread control  (0) 2025.11.05
java.lang package  (0) 2025.11.05
Anonymous object  (0) 2025.11.05
Nested class and Nested interface  (0) 2025.10.08