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)