KOTLIN · 성능
value class (인라인 클래스)
런타임 오버헤드 없이 타입 안전한 래퍼를 만드는 value class.
성능고급value-classinline-class@JvmInline타입안전성능
핵심 설명
런타임 오버헤드 없이 타입 안전한 래퍼를 만드는 value class.
Kotlin code
// 문제: 타입 혼동 (UserId와 ProductId가 둘 다 Int)
fun findOrder(userId: Int, productId: Int) { /* ... */ }
// findOrder(productId, userId) // 컴파일은 되지만 버그!
// 해결: value class — 컴파일 시 Int로 언박싱됨 (오버헤드 없음)
@JvmInline
value class UserId(val value: Int)
@JvmInline
value class ProductId(val value: Int)
@JvmInline
value class Email(val value: String) {
init {
require(value.contains("@")) { "이메일 형식 오류" }
}
}
fun findOrder(userId: UserId, productId: ProductId) {
println("주문 조회: user=${userId.value}, product=${productId.value}")
}
fun main() {
findOrder(UserId(1), ProductId(42))
// findOrder(ProductId(42), UserId(1)) // ❌ 컴파일 에러!
val email = Email("dev@kotlin.io")
println(email.value)
// runningFold — 중간 합계 등 누적 연산
val cumSum = listOf(1, 2, 3, 4, 5)
.runningFold(0) { acc, n -> acc + n }
println(cumSum) // [0, 1, 3, 6, 10, 15]
}학습 팁
@JvmInline은 Kotlin 1.5+에서 필수입니다. value class는 프로퍼티 하나만 가질 수 있고, 인터페이스 구현은 가능합니다.
주의할 점
value class를 nullable로 사용하거나(UserId?), 컬렉션에 담거나, as 캐스팅하면 박싱이 발생해 성능 이점이 사라집니다.
자주 묻는 질문
value class (인라인 클래스)란 무엇인가요?
런타임 오버헤드 없이 타입 안전한 래퍼를 만드는 value class.
value class (인라인 클래스) 학습 시 주의할 점은 무엇인가요?
value class를 nullable로 사용하거나( UserId? ), 컬렉션에 담거나, as 캐스팅하면 박싱이 발생해 성능 이점이 사라집니다.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.