LocalDateTime (미 정재 .ver)

반응형
반응형

LocalDateTime은 LocalDate와 LocalTime두 개를 합친 클래스입니다.
이들은 모두 java 8에 처음 등장하였습니다.
그런데 이상합니다. 

자바 릴리즈 노트에 따르면

 

JDK Releases

The release information on this page covers the Java SE releases that were widely distributed or significant to the development of Java. It does not cover patch releases or other one-off releases.

java.com

2014-03-18 Major 8 LTS Documentation, JSR 337, Configurations

자바 8은 2014년 3월에 출시되었음을 알 수 있습니다.
이게 왜 이상한 이유는 LocalDateTime은 시간과 관련된 클래스입니다.
그런데 엔터프라이즈 어플리케이션을 만드는 언어가 시간과 관련된 클래스가 없었다는 것은 말이 되지 않습니다.
사실 자바에는 시간과 관련된 클래스를 제공하고 있었습니다.

바로 Calender와 Date가 그 주인공들입니다. 
그러면 어째서 자바는 시간과 관련된 클래스를 다시 만든 이유가 무엇일까요?

여러 이유가 있겠지만 쓰레드환경에 안전하지 않는다고 합니다.
일단 javadoc을 살펴보겠습니다.

ISO-8601 달력 시스템에서 표준 시간대가 없는 날짜-시간(예: 2007-12-03T10:15:30.

LocalDateTime날짜-시간을 나타내는 변경할 수 없는 날짜-시간 개체로, 종종 년-월-일-시-분-초로 표시됩니다. 

그렇다고 합니다. 
어디 한번 확인 해보죠.

System.out.println(LocalDateTime.now());

근데 ISO-8601 달력 시스템 
이건 또 뭘까요?

Data elements and interchange formats - Information interchange - Representation of dates and times은 날짜와 시간과 관련된 데이터 교환을 다루는 국제 표준이다. 이 표준은 국제 표준화 기구(ISO)에 의해 공포되었으며 1988년에 처음으로 공개되었다.
https://ko.wikipedia.org/wiki/ISO_8601

이 클래스는 표준 시간대를 저장하거나 나타내지 않습니다. 

docs를 읽으면서 새롭게 안 사실은
과거 응용프로램은 ISO-8601에 적용하지 않았다는 사실을 알 수 있습니다.

이것은 value-based 클래스입니다. 

value-based???

 

Value-based Classes (Java SE 17 & JDK 17 [build 3])

Value-based Classes Some classes, such as java.lang.Integer and java.time.LocalDate, are value-based. A value-based class has the following properties: the class declares only final instance fields (though these may contain references to mutable objects);

download.java.net

이것은 조금더 공부할 필요가 있을 것 같아 이거는 링크만 올려두고 계속해서 LocalDateTime에 대해 설멸하겠습니다.

다음 코드를 확인해겠습니다.

LocalDateTime now = LocalDateTime.now();
System.out.println(now.hashCode());
now = LocalDateTime.of(2022, 10, 20, 20, 10);
System.out.println(now.hashCode());
now = LocalDateTime.of(2022, 11, 20, 20, 10);
System.out.println(now.hashCode());

final이 붙었다는 이야기는 
이 클래스를 계속 호출을 하게되면 클래스를 새로 만들어야 된다는 이야기가 됩니다.
그러면 위 모두 hashcode가 달라야 됩니다. 왜냐하면 새로운 클래스를 호출되었기 때문입니다.

만약 같은 클래스라면 계속 같은 클래스가 나와야 겠죠.
만약에 같은 클래스를 무조건 나오게 하는 방법은 싱글톤 방법이 있을 것 같지만,
하기 귀찮기도 하구 기타 등등 이유때문에 안합니다.

아무튼 공식 docs에도 This class is immutable and thread-safe.라고 나와있습니다.
이것으로 봐서 쓰레드 세이프 하다는 게 알 수 있는데 지금 당장은 잘 모르겠네여.

반응형

'프로그래밍 언어 > 자바' 카테고리의 다른 글

인터페이스  (0) 2022.03.21
SOLID  (0) 2021.09.10
람다  (0) 2021.03.01
자바9 모듈  (0) 2021.02.22
제네릭  (0) 2021.02.21

댓글

Designed by JB FACTORY