PHpullh
학습 라이브러리/Kotlin/인라인 클래스 / Value Class

KOTLIN · 기초 문법

인라인 클래스 / Value Class

@JvmInline value class는 래퍼 타입을 만들되 런타임 오버헤드를 제거합니다. 타입 안전성과 성능을 동시에 확보합니다.

기초 문법고급value-classinline-classtype-safetyzero-overhead

핵심 설명

@JvmInline value class는 래퍼 타입을 만들되 런타임 오버헤드를 제거합니다. 타입 안전성과 성능을 동시에 확보합니다.

Kotlin code

@JvmInline
value class Email(val value: String) {
    init {
        require(value.contains("@")) { "유효하지 않은 이메일" }
    }
    val domain: String get() = value.substringAfter("@")
}

@JvmInline
value class UserId(val id: Long)

fun sendMail(to: Email, from: Email) {
    println("${from.value} → ${to.value}")
}

fun main() {
    val email = Email("user@example.com")
    println("도메인: ${email.domain}")

    // 타입 안전: UserId와 Long을 혼동할 수 없음
    val userId = UserId(12345L)
    // sendMail(userId, email) // 컴파일 오류!
    sendMail(email, Email("admin@example.com"))
}

학습 팁

도메인 원시 타입(이메일, ID, 금액 등)에 value class를 사용하면 파라미터 순서 실수를 컴파일 타임에 잡을 수 있습니다.

주의할 점

value class는 정확히 하나의 프로퍼티만 가질 수 있습니다. 여러 프로퍼티가 필요하면 data class를 사용하세요.

자주 묻는 질문

인라인 클래스 / Value Class란 무엇인가요?

@JvmInline value class 는 래퍼 타입을 만들되 런타임 오버헤드를 제거합니다. 타입 안전성과 성능을 동시에 확보합니다.

인라인 클래스 / Value Class 학습 시 주의할 점은 무엇인가요?

value class는 정확히 하나의 프로퍼티만 가질 수 있습니다. 여러 프로퍼티가 필요하면 data class 를 사용하세요.