반응형
개요
- java 8부터 날짜 계산 코드를 Date, Calendar객체대신 LocalDatetime을 주로 사용하게 되었습니다.
- 사용하게 된 이유와 원인 그리고 기존 객체들의 문제점을 확인 하고자 글을 적게 되었습니다.
1. Calendar와 Date 문제점
1.1 불변객체가 아니다
- calendar와 date클래스에서 set method를 호출해서 언제나 저장된 날짜 정보 변경 가능
- 사이드 이펙트 이슈가 많음
1.2 int 상수 필드의 남용
calendar.add(Calendar.SECOND, 1);
calendar.add(Calendar.JUNE, 1);
- 첫 번째 파라미터에는 JUNE과 같은 전혀 엉뚱한 값이 들어가도 컴파일 시점에서 확인할 방법이 없음
1.3 month 지정 이슈
- Calendar.OCTOBER은 10월로 10이라는 값이 예상되지만 실제로는 9가 저장되어 있습니다.
1.4 Locale 설정 이슈
Asia/Seoul
대신Seoul/Asia
로 잘 못 적어도 컴파일 에러나 실제 런타임 에러도 반환하지 않습니다.- 추가로 이렇게 되면 버그가 발생할수 있습니다.
2. LocalDatetime, LocalDate, LocalTime
2.1 편의 메서드 제공
- of(), now()와 같이 static 메서드를 통해 객체를 생성할 수 있는 팩터리 패턴이 적용되어있음
- 그리고 생성 메서드는 전부 새로운 객체를 반환
2.2 장점
- 잘 못된 월 13월과 같은 값이 들어오면 예외를 던져서 예외 처리를 합니다
- Calendar, Date보다 더 세밀하게 시간 확인 가능합니다
- Calendar, Date: millisecond 단위까지 확인 가능
- LocalDatetime, LocalTime : ns 단위까지 처리 가능
- static factory method를 사용해서 가독성 증가
- of, now 를 통해서 Datetime 객체 생성
- maven, gradle에 dependency를 추가하면 java7 에서도 사용 가능하도록 만든 모듈도 존재
반응형