자바 날짜와 시간 객체
- 문자열만큼이나 날짜와 시간은 중요한 타입이다.
- 날짜와 시간을 어떻게 처리하고 다루는지에 대한 감을 익히는 것이 중요하다.
java.util.Date (JDK1.0) | java.util.Calendar (JDK1.1) | java.time 패키지 (JDK1.8) |
1995 말 | 1997 | 2014 |
메서드 거의 deprecated | Date 클래스 개선, 여전히 단점 O | Date와 Calendar 단점 개선 |
가변 객체 | 불변 객체 |
( The standard date and time classes prior to Java SE 8 are poor. By tackling this problem head-on, Joda-Time became the de facto standard date and time library for Java prior to Java SE 8. Note that from Java SE 8 onwards, users are asked to migrate tojava.time(JSR-310) - a core part of the JDK which replaces this project.) [참고:https://www.joda.org/joda-time/] time 패키지가 표준으로 나오기 전에 Joda 라이브러리가 만들어졌다.
Joda 공식 페이지에 언급되어 있듯이 time 패키지를 사용하는 것이 권장되지만 아직 실무에서 Date나 Calendar(특히)를 사용하는 곳도 많다고 한다. 자바 언어는 하위 호환성이 우수하여 안전하다는 특징이 있다.
Date와 Calendar 클래스에서 날짜와 시간을 같이 다루었기 때문에 time 패키지에는 이를 분리했다. 따라서 날짜를 다루고자 할 때는 LocalDate를, 시간을 다루고자 할 때는 LocalTime을, 두 가지를 다 다루고자 할 때는 LocalDateTime을 사용한다.
Date와 Calendar 클래스에서는 불변 객체가 아니었기 때문에 setter를 통해 데이터 변경이 가능했다. 이렇게 할 경우 값을 같이 사용하는 다른 곳들에서 영향을 받게 된다. time 패키지로 넘어갈 때는 이러한 단점을 개선하여 불변 객체로 정의하였다.
Calendar의 YEAR, MONTH는 0부터 시작했기 때문에 가독성 측면에서 좋지 않다. (배열로 처리하기 때문에 0부터 시작한다) 예를 들어 7월은 6, 9월은 8로 나타낸다. 그렇기 때문에 코드를 작성하면서 휴먼 에러가 발생할 수 있다. 요일은 또 1부터 시작하여 아래와 같다. 주의할 점은 날짜와 시간 필드 모두 int 값을 반환한다는 것이다. 날짜와 시분초는 원래 숫자를 다루므로 상관 없지만 요일의 경우는 월화수목금과 같은 문자열을 원하기 때문에 적절한 변환이 필요하다.
일 | 월 | 화 | 수 | 목 | 금 | 토 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
연월일 <=> 일, 시분초 <=> 초를 자유롭게 변환할 줄 아는 정도로 학습하자.
자바 날짜 관련 코딩 시 Date와 Calendar를 쓰지 마세요!
결론 : 날짜 관련 코드짤 때 Date, Calendar 쓰지 마세요! Date(jdk 1.0), Calendar(jdk 1.1) 클래스의 문제점 - 불변 객체가 아님. setter가 존재하므로 Calendar나 Date 객체가 여러 객체에서 공유되면 한 곳에서 바
nahwasa.com