πŸ“ŒΒ Data Class

Data ClassλŠ” 컴파일된 ν˜•νƒœλ₯Ό 보면 일반 classμ™€μ˜ 차이λ₯Ό μ•Œ 수 μžˆλ‹€.

data class Person(
    val name: String,
    val age: Int
)

image.png

일반 ν΄λž˜μŠ€μ™€μ˜ 차이점은 componentN, copy, equals, hashCode, toString λ©”μ†Œλ“œκ°€ μ˜€λ²„λΌμ΄λ“œ 된 λ‹€. 각 λ©”μ†Œλ“œμ˜ 역할을 μ•Œμ•„λ³΄μž

componentN

data class Person(
    val name: String,
    val age: Int,
)

fun main(){
    val person = Person("Chan", 99)
    println(person.component1())
    println(person.component2())
}

// chan
// 99
data class Person(
    val name: String,
    val age: Int,
    val nickName: String,
    val nickName1: String,
    val nickName2: String,
    val nickName3: String,
    val nickName4: String,
)

// compile
public final data class Person public constructor(name: kotlin.String, age: kotlin.Int, nickName: kotlin.String, nickName1: kotlin.String, nickName2: kotlin.String, nickName3: kotlin.String, nickName4: kotlin.String) {
    public final val name: kotlin.String /* compiled code */

    public final val age: kotlin.Int /* compiled code */

    public final val nickName: kotlin.String /* compiled code */

    public final val nickName1: kotlin.String /* compiled code */

    public final val nickName2: kotlin.String /* compiled code */

    public final val nickName3: kotlin.String /* compiled code */

    public final val nickName4: kotlin.String /* compiled code */

    public final operator fun component1(): kotlin.String { /* compiled code */ }

    public final operator fun component2(): kotlin.Int { /* compiled code */ }

    public final operator fun component3(): kotlin.String { /* compiled code */ }

    public final operator fun component4(): kotlin.String { /* compiled code */ }

    public final operator fun component5(): kotlin.String { /* compiled code */ }

    public final operator fun component6(): kotlin.String { /* compiled code */ }

    public final operator fun component7(): kotlin.String { /* compiled code */ }

    public final fun copy(name: kotlin.String = COMPILED_CODE, age: kotlin.Int = COMPILED_CODE, nickName: kotlin.String = COMPILED_CODE, nickName1: kotlin.String = COMPILED_CODE, nickName2: kotlin.String = COMPILED_CODE, nickName3: kotlin.String = COMPILED_CODE, nickName4: kotlin.String = COMPILED_CODE): Person { /* compiled code */ }

    public open operator fun equals(other: kotlin.Any?): kotlin.Boolean { /* compiled code */ }

    public open fun hashCode(): kotlin.Int { /* compiled code */ }

    public open fun toString(): kotlin.String { /* compiled code */ }
}

toString


data class Person(
    val name: String,
    val age: Int,
){
    override fun toString(): String {
        return "이름은 $name λ‚˜μ΄λŠ” $age μž…λ‹ˆλ‹€."
    }
}

fun main(){
    val person = Person("Chan", 99)
    print(person.toString())
}
//이름은 Chan λ‚˜μ΄λŠ” 99 μž…λ‹ˆλ‹€.

Copy