본문 바로가기
학습/Java

자바 8에 추가된 Date Time API

코동이 2022. 10. 28.

개요


자바 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