자바의 날짜와 시간 API의 문제점
자바에서는 날짜와 시간 API에 대한 악평이 자자했다. 그래서 JODA TIME이라는 외부 라이브러리를 이용하곤 했었는데, 자바 8에서는 이러한 날짜와 시간 API의 문제점을 개선한 API를 제공한다.
무엇이 문제였나?
1) 그레고리력으로 바뀌면서 발생한 율리우스력의 누적된 시간적 문제가 고려되지 않은 부분
2) 썸머타임이 적용되는 부분에 대한 고려되지 않은 부분
...
JDK의 기본 날짜 클래스의 문제점
1) 불변 객체가 아니다(Not Immutable)
날짜 클래스의 set메서드를 통해 날짜를 지정할 수 있게 되어있다. 이 것은 여러 가지 문제점을 만들어낸다.
예를 들어 어떤 스레드에서 set메서드를 통해 날짜를 바꾸고, 또 다른 스레드에서 set메서드를 통해 날짜를 바꾸게 되면 데이터의 무결성을 보장하기가 어렵게 된다.
이를 해결 하기 위해서는 각 객체를 복사해서 반환하는 방법으로 문제를 해결해야 한다.
2) 일관성 없는 요일 상수
Calendar.get(Calendar.DAY_OF_WEEK) 함수에서 반환한 요일은 int 값으로, 일요일이 1로 표현된다. 따라서 수요일은 4이고, 보통 Calendar.WEDNESDAY 상수와 비교해서 확인한다. 그런데 calendar.getTime() 메서드로 Date 객체를 얻어와서 Date.getDay() 메서드로 요일을 구하면 일요일은 0, 수요일은 3이 된다. 두 개의 클래스 사이에 요일 지정값에 일관성이 없는 것이다.
어떻게 개선되었는가?
1) 불변 객체가 되었다.
2) LocalDate, LocalTime 등으로 지역 시간과 시간대가 지정되었다.
3) 월의 int 값과 명칭이 일치한다. 1월은 int 값 1이다.
spring framework에서도 기본적으로 조다 타임을 제공한다.
새로운 자바 8에서의 시간 api는 조다 타임의 영향을 받아 제공되었다.
'JAVA' 카테고리의 다른 글
Comparable 인터페이스에 대한 이해 (0) | 2015.11.07 |
---|---|
자바 Garbage Collection(GC) 튜닝 (0) | 2015.11.07 |
Commons DBCP (0) | 2015.11.07 |
자바 classpath (0) | 2015.11.03 |
Java finalize (0) | 2015.10.26 |