data 클래스

데이터 저장을 목적으로 사용하는 클래스

data 클래스

data 클래스


데이터 저장을 목적으로 사용하는 클래스이다.

  • 상속이 불가능하고 1개 이상의 프로퍼티를 가지고 있어야 한다.
  • equals(), hashcode(), toString(), copy() 함수를 자동으로 생성한다.


equals()


객체 간의 비교(동등선 연산)를 하는 함수이다.

  • 동등성 연산은 같은 프로퍼티를 갖는 인스턴스인지 비교하는 연산으로 자바에서는 equals() 로 비교하고 코틀린에서는 == 로 비교한다.
  • 동일성 연산은 같은 인스턴스인지 비교(주소값 비교)하는 연산으로 자바에서는 == 로 비교하고 코틀린에서는 === 로 비교한다.
fun main() {
    val user1 = User("AAA", 10)
    val user2 = User("AAA", 10)

    println("${user1 == user2}")
    println("${user1 === user2}")
}

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


// true
// false



hashcode()


객체를 식별하는 함수로 해시 값을 비교 후 값이 같을 경우에 동등성 연산을 수행한다.

fun main() {
    val user1 = User("AAA", 10)
    val user2 = User("AAA", 10)

    val info1 = Info("Doctor", 5)
    val info2 = Info("Teacher", 5)

    println("user1: ${user1.hashcode()}")
    println("user2: ${user2.hashcode()}")

    println("info1: ${info1.hashcode()}")
    println("info2: ${info2.hashcode()}")
}


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

class Info(
	val job: String,
	val career: Int
)


// user1: 1733839180
// user2: 1733839180
// info1: 1718721912
// info2: 1763284256



toString()


생성자에 정의된 프로퍼티를 순서대로 값을 반환하는 함수이다.

fun main() {
    println(User())
}


data class User(
    val name: String = "AAA",
    val age: Int = 10
) {
    val weight: Int = 30
}


// User(name=AAA, age=10)



copy()


생성자에 정의된 프로퍼티의 값을 복사하거나 프로퍼티의 값을 변경하여 복사하는 함수이다.

내부 프로퍼티에 대한 참조값을 유지하는 얇은 복사(Shallow Copy)를 한다.

fun main() {
    val user1 = User("AAA", 10)
    val user2 = user1.copy(name = "BBB")

    println(user1)
    println(user2)
}


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


// User(name=AAA, age=10)
// User(name=BBB, age=10)
essential