## 値が1つの場合 ```kotlin @JvmInline value class UserId private constructor(val value: String) { companion object { fun of(value: String): Result<UserId> = when { Regex("\\d{6}").matches(value) -> Result.success(UserId(value)) else -> Result.failure(Exception("Invalid user id")) } } } ``` ```kotlin fun main() { val userId = UserId.of("123456") println(userId) // Success(UserId(value=123456)) val userId2 = UserId.of("12345") println(userId2) // Failure(java.lang.Exception: Invalid user id) } ``` ## 値が2つ以上の場合 ```kotlin data class User(val id: UserId, val name: String) ``` ```kotlin fun main() { val userId = UserId.of("123456").getOrThrow() val user = User(id = userId, name = "tadashi-aikawa") println(user) // User(id=UserId(value=123456), name=tadashi-aikawa) } ``` ## 参考 - [Kotlinでバリューオブジェクトを書く](https://zenn.dev/p_guma/articles/2625d491b599ac)