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 를 사용하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.