## 値が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)