데이터를 다루는데 최적화된 Class
5가지 기능을 내부적으로 자동으로 생성
1. equals() - 내용의 동일성 판단
2. hashcode() - 객체의 내용에서 고유한 코드 생성
3. toString() - 포함된 속성을 보기 쉽게 나타냄
4. copy() - 객체를 복사하여 똑같이 내용의 새 객체를 만듦
※ 파라미터 없이 생성할 수도 있고, 파라미터를 전달하여 일부 속성 교체 가능
5. componentX() - 속성을 순서대로 반환
※ 배열이나 리스트 등에 Data Class 객체가 담겨 있을 때 이 내용을 자동으로 꺼내 쓸 수 있는 기능을 지원하기 위한 함수
fun main() {
equals_hashcode_tostring()
println()
println("====================")
println()
_componextX()
}
fun equals_hashcode_tostring() {
val a = General("name1", 1)
println(a == General("name1", 1))
println(a.hashCode())
println(a)
println()
val b = Data("name2", 2)
println(b == Data("name2", 2))
println(b.hashCode())
println(b)
println()
println(b.copy())
println(b.copy("name3"))
println(b.copy(id = 3))
}
fun _componextX() {
val llist = listOf(
Data("name11", 1),
Data("name12", 2),
Data("name13", 3)
)
for ((a, b) in llist) {
println("$a : $b")
}
}
class General(val name: String, val id: Int)
data class Data(val name: String, val id: Int)