본문 바로가기
CS/Java

LocalDatetime, LocalDate, LocalTime

by clearinging 2022. 1. 12.
반응형

개요

  • 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 에서도 사용 가능하도록 만든 모듈도 존재
반응형

'CS > Java' 카테고리의 다른 글

SOLID 원칙  (0) 2022.02.06
예외(Exception)  (0) 2022.01.20
함수형 프로그래밍  (0) 2022.01.18
Thread  (0) 2022.01.01