data 클래스의 인스턴스를 구조 분해할 때는 data 클래스 생성자에 각 프로퍼티가 나열된 순서대로 값이 대입된다.
Destructuring/Tuple.kt
package destructuring
import atomictest.eq
data class Tuple(
val i: Int,
val d: Double,
val s: String,
val b: Boolean,
val l: List<Int>
)
fun main() {
val tuple = Tuple(
1, 3.14, "Mouse", false, listOf())
val (i, d, s, b, l) = tuple
i eq 1
d eq 3.14
s eq "Mouse"
b eq false
l eq listOf()
val (_, _, animal) = tuple // [1]
animal eq "Mouse"
}
• [1] 구조 분해 선언으로 선언할 식별자 중 일부가 필요하지 않은 경우, 이름 대신 밑줄(_)을 사용할 수 있고, 맨 뒤쪽의 이름들은 아예 생략할 수 있다. 여기서는 밑줄을 사용해 1과 3.14를 무시하고, "Mouse"가 animal에 대입되며, 목록 맨 뒤에 있는 두 변수를 생략했기 때문에 false와 빈 List도 무시된다.