KOTLIN · 객체지향
data class — equals·hashCode·copy·toString
컴파일러가 equals(), hashCode(), toString(), copy(), componentN()을 자동 생성합니다.
객체지향입문data-classequalshashCodecopytoString
핵심 설명
컴파일러가 equals(), hashCode(), toString(), copy(), componentN()을 자동 생성합니다.
Kotlin code
data class User(
val id: Int,
val name: String,
val email: String,
val role: String = "user" // 기본값 OK
)
fun main() {
val u1 = User(1, "Alice", "a@test.com")
val u2 = User(1, "Alice", "a@test.com")
// 구조적 동등성 (값 비교)
println(u1 == u2) // true
println(u1 === u2) // false (다른 객체)
// 자동 생성 toString
println(u1)
// User(id=1, name=Alice, email=a@test.com, role=user)
// copy — 일부 값만 변경한 복사본
val admin = u1.copy(role = "admin")
val renamed = u1.copy(id = 2, name = "Bob")
// 구조 분해
val (id, name) = u1
println("$id: $name")
// HashMap 키로 안전하게 사용 (hashCode 보장)
val users = mapOf(u1 to "active", u2 to "active")
println(users.size) // 1 (u1 == u2이므로)
}학습 팁
copy()는 얕은 복사(shallow copy)입니다. 중첩 객체는 참조가 공유됩니다. 깊은 복사가 필요하면 직접 구현하거나 serialization을 활용하세요.
주의할 점
equals/hashCode는 주 생성자에 선언된 프로퍼티만 포함합니다. 클래스 바디에 선언한 프로퍼티는 비교에서 제외됩니다.
자주 묻는 질문
data class — equals·hashCode·copy·toString란 무엇인가요?
컴파일러가 equals() , hashCode() , toString() , copy() , componentN() 을 자동 생성합니다.
data class — equals·hashCode·copy·toString 학습 시 주의할 점은 무엇인가요?
equals/hashCode는 주 생성자에 선언된 프로퍼티만 포함합니다. 클래스 바디에 선언한 프로퍼티는 비교에서 제외됩니다.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.