더북(TheBook)

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도 무시된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.