용도
data class User(val name: String, val age: Int)
기본 생성자에서 선언된 속성을 통해, 아래의 기능들을 컴파일러가 자동으로 생성해줌 (기본생성자의 프로퍼티만 적용, 바디꺼 적용 X)
의미있는 data 클래스 조건
1.1패치 이후 바뀐점
jvm에서 아무것도 없는 생성자가 필요한 경우
data class User(val name: String = "", val age: Int = 0)
val A = User() //"", 0
val A2 = User("Kotlin")
val A3 = User("Kotlin",10)
val A4 = User(age = 15)
class와 data class 비교
fun main(){
val user1 = U("a",1)
val user2 = User("a",1)
println(user1) //그냥 class
println(user2) //data class
}
class U(var name: String, var age: Int)
data class User(var name: String, var age: Int)
/*출력
U@9807454
User(name=a, age=1)
*/
val user4 = user2.copy(age = 111)
fun main(){
val user1 = U("a",1)
val user2 = User("a",1)
val user4 = user2.copy(age = 111)
println(user1)
println(user2)
println(user4) // User(name=a, age=111)
}
class U(var name: String, var age: Int)
data class User(var name: String="aa", var age: Int=1)
fun main(){
val (name,age) = User("asdasd",1)
println(name)
println(age)
}
class U(var name: String, var age: Int)
data class User(var name: String="aa", var age: Int=1)
/*출력
asdasd
1
*/
fun main(){
val dongsu = User("asdasd",1)
val (name,age) = dongsu
println(name)
println(age)
}
class U(var name: String, var age: Int)
data class User(var name: String="aa", var age: Int=1)
fun main(){
val dongsu = Pair("dongsu",20)
// val dongsu = Pair<String,Int>("dongsu",1)
println(dongsu)
}
fun main(){
val a = General("보영",100)
//3개다 제대로 구현안됨 data class아니니까
println(a == General("보영", 100)) //equals - false
println(a) //toString - General@4fca772d
println(a.hashCode()) //hashCode - 1338668845
val b = Data("루다",200)
println(b == Data("루다",200)) //true
println(b) //Data(name=루다, id=200)
println(b.hashCode()) //46909772
println(b.copy()) //Data(name=루다, id=200)
println(b.copy("아린")) //Data(name=아린, id=200)
println(b.copy(id = 300)) //Data(name=루다, id=300)
val l = listOf(Data("보영",100), //Data클래스 객체들이 담긴 리스트
Data("동수",200),
Data("진호",300))
for ((a,b) in l){ //a는 component1이고, b는 component2이다
println("$a , $b") //보영 , 100
//동수 , 200
}
}
class General(val name: String, val id: Int)
data class Data(val name: String, val id: Int)