코틀린의 value class 활용해 도메인 값 객체 명시해보자
주문번호처럼 그냥 문자열로 흘러다니던 값을 코틀린 value class로 감싸 도메인 값 객체임을 타입으로 드러내고, data class와 무엇이 다른지 비교했다.
작성날짜: 24.09.23
코틀린 언어를 적극 사용해보자
- 코틀린의 장점을 최대한 이용하고 싶음
기존 data class와 비교
그렇다면 value class란 무엇일까
실제 프로젝트에 적용해보자
package com.commerce.service.order.applicaton.usecase.domain
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
// 주문번호 값 객체
@JvmInline
value class OrderNumber (val value: String) {
// 주문번호는 ("ORD-20240815-001") 이와 같이 ORD-날짜-id 형태로 생성된다.
// id를 전달받아서 생성한다.
companion object {
fun create(id: String): OrderNumber {
return OrderNumber("ORD-${LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"))}-$id")
}
}
}
그렇다면 사용은 어떻게?
return OrderSummary(
id = this.id.toString(),
orderNumber = OrderNumber.create(this.id.toString()), // 주문 번호 ("ORD-20240815-001") 🔥
...
)