본문 바로가기
언어/Kotlin

코틀린 DataClass

by 김어찐 2022. 5. 25.
728x90
package dataclass

// DataClass  매개체의 데이터를 관리하는 용도로 사용하는 클래스
// abstract, open, sealed, inner 클래스로 정의할 수 없다.
// 반드시 주 생성자를 가지고 있어야 한다.


fun main() {
    val obj1 = TestClass1(100, 200)
    val obj2 = TestClass2(100, 200)

    var obj5 = TestClass1(100, 200,300)
    var obj6 = TestClass1(100, 200,300)

    if (obj5 == obj6) {
        println("같은객체")
    }
    else{
        println("다른 객체")
    }

    var obj7 = TestClass2(100, 200,300)
    var obj8 = TestClass2(100, 200,300)

    if (obj7 == obj8) {
        println("같은객체")
    }
    else{
        println("다른 객체")
    }

    val obj9 = obj7.copy()
    println("obj9 = ${obj9.a1}")
    println("obj9 = ${obj9.a2}")
    println("obj9 = ${obj9.a3}")

    println("obj9 = ${obj7}")

    // 주생성자 생성시 입력한 파라미터 순서대로
    val num1 = obj7.component1()
    val num2 = obj7.component2()
    println("num1 = ${num1}")
    println("num2 = ${num2}")
    // 객체분해
    val (num10, num11) = obj7
    println("num10 = ${num10}")
    println("num11 = ${num11}")


}

class TestClass1(var a1:Int, var a2:Int){
    var a3:Int=0
    init {
        println("Testclsss1 init")
    }

    constructor(a1: Int, a2: Int, a3: Int) : this(a1, a2)
    {
        this.a3 = a3
    }
}
// 주생성자를 기준으로 전부 동작
// 주로 사용하는 함수 ==(equals), copy
data class TestClass2(var a1:Int, var a2:Int){
    var a3:Int=0

    init {
        println("Testclsss2 init")
    }

    constructor(a1: Int, a2: Int, a3: Int) : this(a1, a2)
    {
        this.a3 = a3
    }
}
728x90

'언어 > Kotlin' 카테고리의 다른 글

코틀린 익명 중첩 클래스  (0) 2022.05.25
코틀린 Generic  (0) 2022.05.25
코틀린 Companion  (0) 2022.05.24
코틀린 지연 초기화  (0) 2022.05.24
코틀린 property  (0) 2022.05.24