Data 클래스 (데이터만 있을 경우 쓰기 좋은 클래스)
data class User(val name: String, val age: Int)
의미 있는 Data 클래스의 조건
1.1이후에 바뀐 점
기본 값
data class User(val name: String = "", val age: Int = 0)
val exam_0 = User()
val exam_1 = User("Kotlin")
val exam_2 = User("Kotlin", 113)
val exam_3 = User(age = 113)
val exam_4 = User(name = "Kotlin", age = 113)
복사
fun copy(name: String = this.name, age: Int = this.age) = User(name, age)
val jack = User(name = "Jack", age = 1)
val olderJack = jack.copy(age = 2)
Destructuring Declarations
val jane = User("jane", 35)
val (name, age) = jane
// 이런식으로 그냥 빼올 수 있음. var age = jane.name 이런 식으로 안해도 됨.
println("$name, $age")
Standard Data Classes
val jane = User("Jane", 35)
println(jane)
val pair = Pair("Jane", 35)
println(pair)
val triple = Triple("Jane", 35, 'a')
println(triple)
중첩 클래스 (Nested Classes)
class Outer{
private val bar: Int = 1
class Nested {
fun foo() = 2
}
}
val demo = Outer.Nested().foo() // == 2
내부 클래스 (Inner Class)
class Outer{
private val bar: Int = 1
inner class Inner{
fun foo() = bar // Outer 클래스의 멤버에 접근 가능.
}
}
val demo = Outer().Inner().foo() // 생성자 필요.
익명 내부 클래스 (Anonymous inner classes)
mSearchEditText.setOnClickListener(object : View.OnClickListener{
override fun onClick(v:View?){ // ...
}
}
mSearchEditText.setOnClickListener(View.OnClickListener{
v-> // ....
})