개요
자바 8의 변화 중 Date와 Time이 새롭게 추가되었습니다. 기존에 어떤 방식을 사용하였고, 어떻게 개선되었는지 확인해보겠습니다.
기존의 Date API와 새로운 API
기존의 Date API는 java.util에 속해 있습니다.
- java.util.Date - 날짜와 시간, 기본 시간대를 사용하여 출력
- java.util.Calendar - 날짜와 시간, 날짜를 조작하는데 더 많은 메소드 제공
- java.text.SimpleDateFormat - 날짜와 달력을위한 형식 (날짜 -> 텍스트), 변환 (텍스트 -> 날짜)
자바 8에서는 JSR310(Joda-time을 참고)이 새로 만들어졌으며 java.time 패키지에 담겨 있습니다.
- java.time.LocalDate - 날짜(시간 포함하지 않음), 타임존 사용하지 않음.
- java.time.LocalTime - 시간(날짜 포함하지 않음), 타임존 사용하지 않음.
- java.time.LocalDateTime - 날짜 및 시간, 타임존 사용하지 않음.
- java.time.ZonedDateTime - 날짜 및 시간, 타임존 사용.
- java.time.DateTimeFormatter - java.time에 대한 형식 (날짜 -> 텍스트), 변환 (텍스트 -> 날짜)
- java.time.Duration - 시간을 초 단위 및 나노초 단위로 측정한다.
- java.time.Period - 시간을 년, 월, 일로 측정한다.
- java.time.TemporalAdjuster - 날짜를 조정한다.
왜 자바 8에서는 java.time 패키지가 새로 추가되었을까?
- 쓰레드 안정성(Thread-safety)
기존의 Date와 Calendar 클래스는 쓰레드안전하지 않습니다. 자바 8에 새로 등장한 Date와 Time API는 불변이며 쓰레드에 안전합니다. 따라서 동시성 문제를 신경쓰지 않아도 됩니다.
- 잘못된 설계
기존의 Date의 기본은 1900년, 1월 시작, 0일부터 시작입니다 - 일관성이 없습니다. 또한 날짜를 조작하는 메서드가 적습니다. 새로운 API는 다양한 기능을 제공합니다
- 타임존 표현의 어려움
개발자들은 타임존 이슈를 해결하기 위해 많은 코드를 작성해야 합니다. 새로운 API는 Local과 ZonedDate 등으로 타임존을 쉽게 제어합니다.
참고
https://www.oracle.com/technical-resources/articles/java/jf14-date-time.html
반응형
'학습 > Java' 카테고리의 다른 글
StringBuffer vs StringBuilder (0) | 2022.11.01 |
---|---|
Java 8에 등장한 Optional이란? (0) | 2022.10.29 |
Java 8에서 개선된 가비지 컬렉터는? (0) | 2022.10.19 |
jar war 차이점 (0) | 2022.04.26 |
자바 비동기 (0) | 2021.08.16 |