PHpullh
학습 라이브러리/Kotlin/data class — equals·hashCode·copy·toString

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는 주 생성자에 선언된 프로퍼티만 포함합니다. 클래스 바디에 선언한 프로퍼티는 비교에서 제외됩니다.