Notice
Recent Posts
Recent Comments
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- MySQL
- java tip
- JPA
- Spring MVC
- spring security
- Drools Fusion
- jquery
- ibatis
- @SqlResultSetMapping
- jstl
- Spring
- jenkins
- spring transaction
- GEventEvaluator
- guvnor
- drools
- maven
- localdatetime
- gwt-ext
- gwt
- rember me
- custom filter
- COC
- JBoss Seam
- zabbix
- querydsl
- SVN
- CEP
- spring jpa
- Hudson
Archives
- Today
- Total
봉 블로그
Date 대신 LocalDateTime을 사용하자 본문
반응형
Java에서 Date 대신 LocalDateTime을 사용하는 것이 권장되는 이유는 다음과 같습니다:
1. 불변성 (Immutability)
- java.util.Date는 mutable(변경 가능) 합니다.
- LocalDateTime은 immutable(불변) 합니다.
- 불변 객체는 멀티스레드 환경에서 안전하고, 예측 가능한 동작을 합니다.
- 예: date.setTime(...)처럼 기존 값을 변경할 수 있는 Date는 실수나 버그의 원인이 될 수 있음.
2. 명확한 설계와 API
- Date는 내부적으로 밀리초 기준의 숫자(time) 를 저장하며, 날짜·시간 정보를 명확하게 표현하지 않음.
- LocalDateTime은 날짜와 시간을 분리해서 명확하게 표현:
- LocalDateTime.of(2025, 7, 14, 13, 45);
- Date는 시간대(timezone) 개념이 혼재되어 있고 혼동을 줄 수 있음.
- LocalDateTime은 시간대가 없는 시간을 명확히 나타냄. 시간대가 필요하면 ZonedDateTime을 사용.
3. 풍부한 기능 제공
- LocalDateTime은 비교, 조작, 포맷 등의 기능이 훨씬 많고 직관적입니다.
- LocalDateTime now = LocalDateTime.now(); now.plusDays(5).minusHours(2); now.isAfter(otherDateTime);
- Date는 이런 기능이 거의 없으며, 대부분 Calendar를 함께 사용해야 함 → 코드가 복잡해짐.
4. 표준화된 포맷과 파싱
- LocalDateTime은 DateTimeFormatter와 함께 사용하여 날짜 포맷팅과 파싱이 명확하고 안전함.
- Date는 SimpleDateFormat을 사용하며 스레드 안전하지 않음.
5. JDK 권장 (java.time 패키지)
- Java 8부터 도입된 java.time 패키지 (LocalDateTime, ZonedDateTime, 등)는 Joda-Time을 모델로 만들어졌고, 공식적으로 Date, Calendar 등을 대체하도록 설계됨.
- Oracle은 더 이상 Date 사용을 권장하지 않음.
❌ 언제 Date를 사용할 수밖에 없나?
- 레거시 코드나 오래된 라이브러리에서 Date를 사용하고 있을 때
- DB나 외부 시스템과 연동 시 Date 타입을 사용하는 경우
→ 이 경우에도 LocalDateTime ↔ Date 간 변환은 java.time 패키지에서 제공되므로 안전하게 변환 가능.
변환 예시
// LocalDateTime → Date
LocalDateTime ldt = LocalDateTime.now();
Date date = Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());
// Date → LocalDateTime
Date date = new Date();
LocalDateTime ldt = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
결론
LocalDateTime은 안전성, 명확성, 기능성 면에서 Date보다 우수하며, 현대 Java 개발에서는 사실상 표준입니다. 가능하면 Date 대신 LocalDateTime을 사용하세요.
필요하다면 위 내용에 대해 코드 예시나 실무 적용 방법도 더 도와드릴 수 있습니다.