자바에서 시간과 날짜를 다룰 때 가장 기본적으로 만나는 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) + "일");
}
}
👨🏫 쉽게 이해하는 핵심 포인트
- 월(Month)의 함정: Calendar에서 1월은 숫자 0입니다. 그래서 화면에 보여줄 때는 항상 +1을 해줘야 우리가 아는 월이 나옵니다.
- Date와 Calendar의 상호 변환: 실무에서는 두 클래스를 섞어서 써야 할 때가 많습니다.
- Date → Calendar: calendar.setTime(date);
- Calendar → Date: Date date = calendar.getTime();
- 불변성의 부재: 두 클래스 모두 객체 내부의 값이 바뀔 수 있는(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 |