2026/02/23 2

Java 17 java.time 완전 가이드: LocalDate/LocalDateTime/ZonedDateTime, 포맷팅, 레거시(Date) 변환

Java 17 기준으로 LocalDate/LocalDateTime/ZonedDateTime 선택 기준, DateTimeFormatter 포맷팅/파싱, 레거시 Date·Calendar·Timestamp 변환까지 실무 관점으로 정리합니다.1) 도입 (문제 상황)서버 로그는 UTC인데 화면에는 KST로 보여야 하고, DB에는 Timestamp가 들어가 있는데 API 요청은 "2026-02-22T10:30:00"처럼 문자열로 들어오는 상황을 자주 마주하실 거예요. 그때마다 Date, Calendar, SimpleDateFormat을 섞어 쓰다 보면 “왜 9시간이 밀렸지?” 같은 버그가 생기기 쉽습니다. Java 8부터의 java.time을 제대로 잡아두면 이런 문제를 안정적으로 줄일 수 있습니다.2) 핵심 개념..

JAVA 2026.02.23

Java Optional 올바르게 쓰기: of vs ofNullable, 안티패턴, 실무 가이드라인

Java 17 기준으로 Optional.of/ofNullable 차이부터 흔한 안티패턴, API 설계·서비스 코드에서의 실무 가이드라인을 정리합니다. 서비스 코드에서 null 체크를 줄이려고 Optional을 도입했는데, 오히려 get()이 난무하거나 Optional> 같은 코드가 생긴 적 있으실 거예요. 더 난감한 건 Optional.of() 때문에 운영에서 NPE가 터지는 경우입니다. Optional은 “null을 없애는 마법”이 아니라, 경계를 명확히 하는 도구에 가깝습니다.핵심 개념: Java Optional을 왜/어디에 써야 할까Optional의 핵심 가치는 “값이 없을 수 있음”을 타입으로 표현해서, 호출자가 그 가능성을 무시하기 어렵게 만드는 데 있습니다. 다만 이 장점은 적절한 경계(주로 ..

JAVA 2026.02.23