Java/개념 7

Java 8 ZonedDateTime vs OffsetDateTime 어떤 상황에서 쓰는게 적합한가?

Java 8 ZonedDateTime vs OffsetDateTime 어떤 상황에서 쓰는게 적합한가? 들어가기 전에 본 글은 회사 팀 내 세션 공유용 자료이며 이전 글 내용과 이어집니다. OffsetDateTime OffsetDateTime은 (LocalDateTime(날짜 + 시간) + ZoneOffset) 을 포함한다 Instant와 같이 나노초 정밀도로 타임라인에 순간을 저장한다 UTC/그리니치에서 오프셋을 추가하면 현지 날짜-시간을 얻을 수 있다. 데이터베이스에 Timestamp를 저장하거나 네트워크를 통해 XML 문서에 Timestamp 를 통신하는 데 사용하는 것이 유리하다고 한다. ZoneOffset UTC 기준 시간을 표현한 것 우리나라 Timezone(Asia/Seoul) 기준 UTC +..

Java/개념 2022.08.19

Java 8 LocalDateTime vs Instant 어떤 상황에서 쓰는게 적합한가?

Java 8 LocalDateTime vs Instant 어떤 상황에서 쓰는게 적합한가? 들어가기 전에 본 글은 세션 공유용 자료이며 LocalDateTime, Instant 의 개념에 관한 짧은 글이 아니므로 양해 부탁드립니다. 포스팅 계기 최근 새 회사(이커머스 도메인)에 이직하게 되었고 코프링(코틀린 + 스프링)기반 프로젝트를 진행하고 있었다. 프로젝트를 살펴보던 중 시간 관련 데이터들을 DB에 LocalDateTime 로 넣고 있었다. Instant 클래스가 아닌 LocalDateTime로 넣는 이유가 궁금해서 팀 내에 공유할 겸 오랜만에 포스팅하게 되었다. 그냥 LocalDateTime 쓰면 안되나요? 독자들은 LocalDateTime 이나 Instant 아무거나 쓰면 안 되나? 이런 궁금증이 ..

Java/개념 2022.08.09

Java 메모리 최적화가 어떻게 되는지 과정

Java 메모리 최적화가 어떻게 되는지 과정 메모리 최적화 목적 예를들어 아래 예제에서 Penguin객체가 하나가 아닌 Penguin[100]과 같이 요소가 100개인 배열이라고 할 때 힙영역에 생기는 Penguin 객체는 100개가되고 test() 메서드도 각 Penguin 객체에 따라서 힙에 100개가 만들어져야한다. 그렇지만 객체 멤버 메서드는 각 객체별로 달라지는 것이 아니다. 객체 멤버 메서드에서 사용하는 객체 멤버 속성의 값만 다를 뿐이고 똑같은 객체 멤버 메서드인 test() 메서드를 힙 영역에 100개나 만든다는 것은 심각한 메모리 낭비이다. 이를 해결하기 위해 JVM은 지능적으로 객체 멤버 메서드 test()를 스태틱 영역에 단 하나만 보유하게된다. 눈에는 보이지 않지만test() 메서드..

Java/개념 2021.02.25

JVM 동적 클래스 로딩

JVM 동적 클래스 로딩 클래스 로더란 '.class' 바이트 코드를 읽어 들여 class 객체를 생성하는 역할을 담당한다. 즉, 클래스 로더는 클래스가 요청될 때 파일로부터 읽어 메모리로 로딩하는 역할을 하며 자바 가상 머신의 중요한 요소 중 하나다. ※ 클래스 로더가 classpath라는 환경 변수에 등록된 디렉토리에 있는 모든 클래스들을 먼저 JVM에 로딩한다. JVM에 로딩된 클래스만이 JVM에서 객체로 사용할 수 있다. 클래스 로딩은 클래스를 로딩하는 시점 또는 실행 중간에도 할 수 있다. 자바의 클래스 로딩은 세부적으로 로딩, 링크, 초기화라는 세 단계 과정을 거친다. 로딩 : 클래스 파일을 바이트 코드로 읽어 메모리로 가져오는 과정 링크 : 가장 복잡한 과정으로, 읽어본 바이트 코드가 자바 ..

Java/개념 2021.02.24

[Java] Java 8에 추가된 LocalDate, LocalTime, LocalDateTime

Java 8에 추가된 LocalDate,LocalTime,LocalDateTime 이전 포스팅에 이어 포스팅하겠습니다. 2020/11/02 - [Java/개념] - Java 에서 Date, Calendar클래스가 왜 Deprecated됐는지? 이번 포스팅은 java.time 패키지의 LocalDate,LocalTime,LocalDateTime 에 대해 알아보겠습니다. Java의 Time API 흐름 Date(jdk 1.0) → Calendar(jdk.1.1) → java.time(jdk 1.8) LocalDate,LocalTime,LocalDateTime 클래스들의 공통점 TimeZone 개념을 가지고 있지 않기 때문에 TimeZone에 따라 시간 변환이 불가능합니다. java.time 패키지 이와같이 ..

Java/개념 2020.11.02

[Java] Date, Calendar클래스가 왜 Deprecated됐는지?

Java 에서 Date클래스와 Calendar 클래스가 왜 Deprecated 됐는지? 앞 전 포스팅으로 이어서 포스팅하겠습니다. 2020/11/02 - [Java/개념] - Java Date와 Calendar 클래스 국제화와 잘 맞지 않는다 java.util.Date 클래스는 실제로 더 이상 사용되지 않으며, 생성자와 다른 생성자/메소드도 더 이상 사용되지 않는다. 그것은 국제화와 잘 맞지 않기 때문에 더 이상 사용되지 않았다. Calendar클래스는 대신 다음과 같이 사용해야한다. Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, 1988); cal.set(Calendar.MONTH, Calendar.JANUARY); cal.set(Cale..

Java/개념 2020.11.02

[Java] Date와 Calendar 클래스

Date와 Calendar 클래스 JDK 1.0 버전에서는 날짜를 처리하기 위해 Date 클래스를 사용했다. JDK 1.1 버전부터는 Calendar 클래스를 사용하여 날짜 처리 작업을 하도록 변경되었다. Date 클래스의 대부분 메소드들 deprecated 되었다. 현재 Date클래스의 생성자는 두 개만 사용이 가능하고 나머지는 deprecated 되었다. 먼저 Date 클래스의 생성자를 알아보자 Date 클래스의 생성자 생성자 설명 Date() 객체가 생성된 시간을 갖는 Date 객체를 생성 Date(long date) 매개 변수로 넘어온 long 타입을 갖는 Date 객체를 생성 Date(long date) 중 long date 값은 UTC 시간으로 현재 시간을 long 타입으로 리턴해주는 Syst..

Java/개념 2020.11.02