· inner-circle

코틀린의 value class 활용해 도메인 값 객체 명시해보자

주문번호처럼 그냥 문자열로 흘러다니던 값을 코틀린 value class로 감싸 도메인 값 객체임을 타입으로 드러내고, data class와 무엇이 다른지 비교했다.

작성날짜: 24.09.23

코틀린 언어를 적극 사용해보자

  • 코틀린의 장점을 최대한 이용하고 싶음

기존 data class와 비교

image

그렇다면 value class란 무엇일까

image

실제 프로젝트에 적용해보자

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") 🔥
        ...
    )

참고문헌