본문 바로가기

Java & Kotlin

(6)
Java/Kotlin에서 Instant와 LocalDateTime 사용 시 주의점 개요Java 8부터 도입된 java.time 패키지는 날짜와 시간을 다룰 때 직관적이고 안전한 방법을 제공한다.이 중 Instant와 LocalDateTime은 자주 사용되는 클래스이지만, 특성을 잘 알고 사용하지 않으면 사용 중에 예상치 못한 문제가 발생할 수 있다.Instant와 LocalDateTime의 정의Instant: 특정 시점(타임스탬프)을 나타내는 클래스이다. UTC(협정 세계시) 기준의 시간을 밀리초 혹은 나노초 단위로 저장하며, 전 세계에서 동일한 기준 시간을 유지하는 데 적합하다. Instant는 시간대 정보를 포함하지 않으며, UTC 기준으로 동작한다.LocalDateTime: 특정 시간대를 고려하지 않은 날짜 및 시간을 나타내는 클래스이다. 즉, 시간대 정보 없이 연-월-일 시-분..
Kotlin에 MapStruct 적용할 때 주의할 점 개요매퍼 라이브러리로 mapstruct를 사용하는 과정에서 생각과 달리 작동하던 부분이 있어서 애를 먹고 고민했던 부분이 있다.그 과정에서 알게된 것들(코틀린의 기본 문법 포함)에 대해 정리하는 글. 적용한 mapstruct 버전 : 1.5.5 final미리보기이 글의 핵심을 먼저 mapstruct의 도큐먼트 인용으로 언급하자면 다음과 같다.3.9. Using ConstructorsMapStruct supports using constructors for mapping target types. When doing a mapping MapStruct checks if there is a builder for the type being mapped. If there is no builder, then Map..
Kotlin의 @ModelAttribute와 Custom Validation 어노테이션 적용 문제 해결 사례 Spring Boot 프로젝트에서 @ModelAttribute를 통해 요청 데이터를 받으면서, Kotlin의 데이터 클래스를 활용해 커스텀 유효성 검사 어노테이션을 적용할 때 발생했던 문제와 이를 해결한 과정을 정리한다.문제 상황 다음과 같이 @ModelAttribute로 선언한 데이터 클래스 PayRequest가 있다. userId 필드에는 커스텀 유효성 검사 어노테이션이 적용되어 있다. PayRequest 클래스data class PayRequest( val amount: Double, // 결제 금액 @CheckUserId val userId: Long, // 사용자 ID) { init { require(amount > 0) { "금액이 유효하지 않습니다." } ..
유효성 검사 리팩토링 : Kotlin when 구문으로 중복 줄이기 문제 상황유효성 검사 리팩토링 예시를 위해 사용자가 이메일을 수정할 때, 여러 가지 조건을 체크해야 하는 상황을 가정하였다. 조건은 다음과 같다. 이메일이 기존 이메일과 같으면 안 되고, 공백으로 제출되면 안 되며, 이메일 형식이 잘못되었거나 이미 다른 사용자에 의해 사용 중일 경우에는 예외가 발생해야 한다. 기존 코드에서는 각 조건마다 BusinessException을 중복해서 던지고 있다. 각 조건마다 동일한 예외 처리 구문이 반복되는데, 이를 when 구문으로 개선할 수 있다. 이로 인해 코드의 중복을 줄이고, 유지보수성을 높일 수 있다. 리팩토링 전 코드private fun validateUpdateEmail(req: EmailUpdateDto) { val userDto = userDomai..
코틀린의 스코프 함수(scope functions) 코틀린 기초 문법을 공부할 때, 스코프 함수라는 것을 접하고 처음에는 잘 이해가 가지 않았다.이걸 어느 상황에서 써야 하는지, 왜 써야 하는지 잘 와닿지 않았기 때문이다.점점 코틀린으로 코딩을 하면서 스코프 함수를 사용해야 하는 상황이 어떤 것인지 알게 되었고, 이제는 꽤 자주 사용하게 되었다. 적절하게 사용하면 편리한 스코프 함수에 대해 정리해 보려고 한다. 스코프 함수 이름에서 보듯이, 스코프 함수는 코틀린에서 특정 객체의 스코프(범위) 내에서 작업을 수행하도록 도와주는 함수이다.이 함수들은 블록 내에서 객체에 대한 일련의 작업을 실행하게 한다. 또한 스코프 함수를 사용하면 코드를 훨씬 간결하고 가독성 있게 작성할 수 있다.대표적인 스코프 함수는 let, apply, also, run, with가 있..
Java에서 데이터 중심 프로그래밍을 지원하는 기능들 Java에서는 최근에 데이터 중심 프로그래밍(Data-Oriented Programming, DOP)을 지원하는 기능들이 도입됐다. 특히 Java 17 이후 이러한 기능들이 더욱 강화되면서 데이터를 보다 직관적이고 효율적으로 다룰 수 있게 되었다. Java에서 지원하는 4가지 주요 DOP 기능(Sealed Types, Records, Pattern Matching, Smart Switch Expressions)을 소개하고, 각각의 기능이 어떻게 활용될 수 있는지 예시와 함께 알아보려고 한다.1. Sealed Types (봉인된 타입)Sealed Types는 클래스 계층 구조를 제어할 수 있게 해주는 기능이다. 어떤 클래스가 특정 클래스나 인터페이스를 확장할 수 있는지를 명시적으로 제한한다. 이를 통해 상..