쌩로그

자바 시간 관련 클래스는 가급적 LocalXX 타입을 사용하자 본문

Language/JAVA

자바 시간 관련 클래스는 가급적 LocalXX 타입을 사용하자

.쌩수. 2023. 7. 24. 12:01
반응형

목록

  1. 포스팅 개요
  2. 본론
  3. 요약

1. 포스팅 개요

프로젝트 중간에 너무 몰두한 나머지 판단력이 흐려져 날짜 타입을 선언할 때,
SQL의 타입이 Date라서 자바 코드에 날짜 관련 타입에 Date를 썻다.;;;

핑계가 참 지랄맞다...;;;; ㅋㅋㅋㅋㅋㅋㅋㅋ
핑계인가... 바보인가..
글 쓰면서도 내가 나한테 어이가 없어서 웃음이 나온다...ㅋㅋㅋ

그냥 날짜라면 LocalDate를,
시간이라면 LocalTime을
혹은 둘 다 써야한다면, LocalDateTime을 사용하자.

그럼 왜 나는 이런 생각을 하게 되었는가....
본론에서 풀어보겠다.

2. 본론

먼저 자바의 java.util 패키지에는 Date, Calender가 있다.

이게 너무 문제가 많아서 java 8부터 java.time 패키지를 통해서 LocalXX 클래스들을 지원하게 되었다.

처음에 나는 각 도메인의 Entity에 날짜를 가리키는 필드에 Date타입으로 선언했었다.

@JsonFormat(pattern = "yyyy-MM-dd")를 이용해서 요청을 받고, 응답하니 문제가 별로 없어보였다.

하지만, 문제가 조금씩 발생하기 시작했다.

문제가 발생한 부분은 다음과 같다.

여행 검색을 날짜로 검색하려고 할 때,
'날짜'를 검색해서 동일한 날짜의 데이터를 목록으로 받아오도록 하려고 했다.

따라서 검색조건을 받는 Condition 클래스에 Date 타입의 필드를 받으려고 했다.
지금 수정된 코드는 다음과 같다.

지금 LocalDate로 되어있는 타입을 원래는 Date타입으로 선언했었다.
그리고 쿼리스트링을 통해서 값을 집어넣어 컨디션 클래스의 필드로 받게 했는데

이전에 [@Setter로 바인딩되지 않던 문제를 포스팅]했는데, 이를 해결했더라도 값이 제대로 들어가지 않던 것이었다.

그래서
@JsonFormat 애너테이션과 @DateFormat 애너테이션을 혼용하거나, 혹은 순서를 바꾸거나, 하나씩만 쓰도록 했지만 결국 값이 들어가지 않았다.

그래서 LocalDateTime을 사용하려했다.
하지만 이 마저도 소수점 이하 4~5번째 단위 차이로 데이터를 제대로 불러오지 못했다.

그래서 현재 프로젝트에서 날짜,시간 같이 사용하는 것이 없기 때문에선택한 것이 날짜로만 조회하기 때문에,
날짜관련 타입은 LocalDate 타입으로 변경했고,
시간관련 타입은 LocalTime타입으로 변경했다.

그래서 이제 바인딩 된 이후의 조회쿼리들이 알맞게 매핑되면서 데이터들을 잘 불러오게 되었다.

3. 요약

스샷이 별로 없어서 내용이 밋밋하긴하지만,
요약해보면,
"자바에서 시간,날짜타입은 Date 타입보다는 1.8이후에 나온 LocalXX 타입을 가급적 사용하자."
와 같다.

728x90

'Language > JAVA' 카테고리의 다른 글

Java - Scope  (2) 2023.12.11
TIL - 자바의정석 1~9장까지 흩어보기  (1) 2023.08.14
람다식 - 01.  (0) 2023.05.26
자바 (Class.forName("~") feat. ReflectAPI)  (0) 2023.05.05
자바 유니코드 출력  (0) 2023.05.05
Comments