Java

Java에서 Date, Calendar를 쓰면 안되는 이유

Code Bomber 2021. 3. 3.

Java책을 보다보니 Calendar를 가르치고 있길래 문득, 인턴 할때 Calendar를 쓰지말고 다른 API를 사용하라고 해서 왜 그런가 찾아보았다.

 

날짜, 시간을 다루는 API인 Date와 Calendar는 많은 문제가 있다고 한다.

 

문제점

 

1. 불변 객체가 아니다.

- 불변 객체가 아니기때문에 하나의 Date객체를 만들고 이 값을 여러 곳에서 바꾸면 한 곳에서 바꾼 값이 다른 곳에 영향을 미칠 수 있다. 그래서 객체를 복사해서 반환하는 기법으로 구현해야 한다.

 

2. int 상수를 남용해서 엉뚱한 숫자가 들어가도 체크하기 어렵다.

- Calendar.MAY 자리에 Calendar.SECOND가 들어가도 컴파일 할 때 확인이 불가하다.

 

3. 월 지정이 배열 인덱스마냥 헷가리게 되어있고, 두 클래스의 요일 상수가 다르다.

- Calendar.March(3월)은 3이아니라 2다.

- Calendar 객체는 일요일이 1부터 시작, Date 객체는 일요일이 0부터 시작한다.

 

4. 지션이 애매하다.

- 처음에는 Date클래스만 날짜 연산을 지원하다가 Calendar가 생기면서 애매하게 둘을 섞어서 쓰게 되었다.

 

5. 타임존 아이디를 틀려도 오류가 발생하지 않는다.

- Asia/Seoul을 Seoul/Asia로 해도 실행이 된다.

 

 

그래서 뭘 써야되느냐?

-> Joda-Time이란 걸 쓴다. 아래 블로그 글을 참고하자

 

https://jojoldu.tistory.com/26

 

[Joda-time] 월, 일, 요일, 오전/오후 표현하기

Java는 1.7까지 Date가 구리기로 소문났다. (참고) 1.8부터는 많이 개선되었지만.... 회사에서 개발을 하다보면 1.8에서 개발할수있는 경우가 별로없다. 대부분 1.6 ~ 1.7 일경우가 많은데 (리팩토링은

jojoldu.tistory.com

 

댓글