언어/Kotlin

[Kotiln 26강] Data Class

연나연 2024. 1. 8. 09:39

 

Data Class

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

 

특별한 용도가 들어가는건 아니고 정의되어 있는 프로퍼티들을 보다 쉽게 관리하기 위해 메소드를 제공하는 것입니당~

Data Class 메서드

Data Class 는 개발자의 개발 편리성을 위해 몇 가지 메서드가 자동으로 구현된다.
equals : 객체가 가지고 있는 변수를 모두 비교하는 메서드
hashCode : 객체를 구분하기 위한 고유한 정수값 (얘는 뭐 딱히 볼 필요 없습니다..ㅎㅎ)
copy : 객체를 복제하는 메서드
toString : 객체가 가지고 있는 변수의 값을 출력
componentN : 객체 분해

 

equals
fun main(){
    // 일반 클래스의 객체를 생성한다.
    val obj1 = TestClass1(100, 200)
    val obj2 = TestClass1(100, 200)

    // 데이터 클래스의 객체를 생성한다.
    val obj3 = TestClass2(100, 200)
    val obj4 = TestClass2(100, 200)

    // 일반 클래스

    // 코틀린에서 == 연산자를 사용하면 equals 메서드를 호출하여 그 결과를 반환한다.
    // 만약 클래스에 equals 메서드를 구현하지 않으면 변수에 저장되어 있는 값을 비교한다.
    // 즉 변수가 가지고 있는 객체의 주소값이 같은지를 비교한다.
    if(obj1 == obj2){
        println("obj1과 obj2는 같은 객체입니다")
    } else {
        println("obj1과 obj2는 다른 객체입니다")
    }

    // 데이터 클래스를 통해 생성한 객체를 비교한다.
    // 데이터 클래스는 equals 메서드가 구현되어 있으며 객체가 가지고 있는 프로퍼티의
    // 값이 같은 지를 비교해준다.
    if(obj3 == obj4){
        println("obj3과 obj4의 주 생성자에 정의된 프로퍼티의 값이 같습니다")
    } else {
        println("obj3과 obj4의 주 생성자에 정의된 프로퍼티의 값이 다릅니다")
    }



// 일반 클래스
class TestClass1(var a1:Int, var a2:Int)

// 데이터 클래스
data class TestClass2(var a1:Int, var a2:Int)​
copy
▶객체를 복제하여 새로운 객체를 생성한다.
▶같은 클래스를 통해 객체를 생성하고 주 생성자에 정의되어 있는 프로퍼티의 값을 추출하여 새롭게 생성된 객체에 저장해준다.
fun main(){

    val obj5 = obj3.copy()

    println("obj5.a1 : ${obj5.a1}")
    println("obj5.a2 : ${obj5.a2}")
    println("obj3.a1 : ${obj3.a1}")
    println("obj3.a2 : ${obj3.a2}")

    obj5.a1 = 1000
    println("obj5.a1 : ${obj5.a1}")
    println("obj3.a1 : ${obj3.a1}")​
toString